Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    problema incomprensibile con le accentate

    nel gestionale che ho appena finito, viene salvato un campo con il titolo del libro che si sta catalogando.

    c'è poi un motore di ricerca che permette di impostare la chiave di ricerca e lo script restituisce tutti i titoli presenti nel database con la chiave desiderata.

    il problema è questo: il cliente mi ha chiesto che sia possibile ottenere come risultato sia i titoli con dentro la parola ricercata, sia quelli con le sue eventuali vocali accentate. faccio un esempio: immaginiamo che nel database siano salvati due titoli:
    città
    citta

    uno con la a accentata e uno senza.
    mettendo come chiave "citta" devono saltar fuori entrambi.

    io gli ho risposto che questo non era possibile in quanto sono due lettere diverse. e infatti secondo lo standard ascii sono due lettere diverse.
    poi, per curiosità, ho provato cosa succede.

    in pratica, ho salvato nel database un titolo di esempio:
    "perchè"

    e salta fuori come risultato quel titolo sia che io metta "perchè", sia che io mettà "perché" sia che io metta "perche"

    in pratica, lo script fa, senza volerlo, quello che vorrebbe il cliente, mentre invece dovrebbe rispondere come risultato solo quello che effettivamente io gli ho chiesto.

    posto che la cosa mi fa felicissimo perchè involontariamente risolve un problema del cliente, qualcuno mi sa spiegare come mai?

    giusto per informazione, il database è mysql e i titoli vengono salvati in un campo di tipo varchar e lunghezza 200, mentre questa è l'istruzione che lo script usa per la ricerca:


    codice:
    $query=mysql_query("SELECT * FROM titoli WHERE titolo LIKE '%$titolo%'");

  2. #2

  3. #3
    xke quel LIKE sta per come e quei % sono caratteri speciali che ti consentono di individuare tutte le parole simileùi all'interno del db.....se fai un ricerca puoi capirlo meglio..
    La programmazione...
    che passione!!..

  4. #4
    Originariamente inviato da nicodj88
    xke quel LIKE sta per come e quei % sono caratteri speciali che ti consentono di individuare tutte le parole simileùi all'interno del db.....se fai un ricerca puoi capirlo meglio..
    allora, le % vogliono dire "qualsiasi cosa".
    quindi cercando citta% dovrebbe resistuirmi anche "cittadinanza" non "città"
    penso che il """problema""" sia dovuto a come funziona LIKE, che dovrebbe funzionare in modo differente da "=" solo che non trovo documentazione su come funziona LIKE

  5. #5
    fidati...te lo dico io che ho un libro davanti..

    la clausola LIKE si usa x ricercare strighe di caratteri che rispettano certi pattern, i metacaratteri da usare sono % o _ per indicare una sequenza composta rispettivamente da 0 o piu caratteri arbitrari oppure da un solo carattere qualsiasi...


    capito???
    La programmazione...
    che passione!!..

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da nicodj88
    capito???
    capito cosa? Non hai risposto alla sua domanda

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da jos3ph
    allora, le % vogliono dire "qualsiasi cosa".
    quindi cercando citta% dovrebbe resistuirmi anche "cittadinanza" non "città"
    penso che il """problema""" sia dovuto a come funziona LIKE, che dovrebbe funzionare in modo differente da "=" solo che non trovo documentazione su come funziona LIKE
    In effetti la cosa appare incomprensibile.
    Posta la definizione esatta della tabella, e specifica la versione di mysql che usi

  8. #8
    lui nn ha nessun problema...voleva solo sapere xke il like e il % si comportano in quel modo...
    La programmazione...
    che passione!!..

  9. #9
    Originariamente inviato da luca200
    In effetti la cosa appare incomprensibile.
    Posta la definizione esatta della tabella, e specifica la versione di mysql che usi
    ciao, la versione di mysql è 4.1.9, non ho capito però cosa intendi come "definizione della tabella".

    per tutti gli altri, il problema è questo.

    ipotesi: salvo nel database tre record:
    citta
    città
    cittadinanza

    il problema è questo:
    nel momento in cui faccio una select con
    "select * from titoli where titolo like %$titolo%

    mysql dovrebbe resituire

    con $titolo=citta
    i record
    citta
    cittadinanza

    con $titolo=città
    i record
    città

    mentre invece, sia che $titolo sia "citta" che "città" mysql restituisce
    citta
    città
    cittadinanza

    in pratica, mysql se ne frega delle accentate.
    la cosa mi fa molto felice, dato che il cliente chiedeva esattamente questo.
    voglio solo capire PERCHE' mysql se ne frega delle accentate, dato che OGGI mi ha risolto un problema, ma UN DOMANI potrebbe benissimo crearlo, visto che restituisce un record diverso da quello che dovrebbe.
    ripeto, ne sono felice di questo bug visto che il cliente voleva così, ma per come la vedo io, e a rigor di logica, è un bug.
    in ultimo, potrebbe anche non essere un bug, ma non trovo documentazione ufficiale sul comportamento della funzione like in mysql, se qualcuno la trova e la posta o la linka gliene sarei veramente grato.

  10. #10
    http://dev.mysql.com/doc/refman/5.0/...functions.html

    è molto interessante il commento di un utente, in fondo alla pagina:

    Posted by Sascha René Leib on October 10 2002 1:29am

    Also, keep in mind that by default,
    Swedish/Finnish string comparison rules are in
    use! This means that e.g.: u <> ü = y !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.