Domanda

Sto cercando di trovare un metodo di confronto in MySQL (la mia versione è 5.0) in cui le stringhe che differiscono nel caso in cui sono considerati lo stesso, ma non ci sono altre regole come:

A = A

e così via.

Ho cercato di trovare la giusta collazione qui: http: // www. collation-charts.org/mysql60/by-charset.html ma sembra che il confronto che sto cercando non esiste.

Non posso usare nella query SQL: SELECT ... WHERE inferiore (Colonna1) = inferiore (column2), perché gli indici su colonne column1 e column2 non vengono utilizzati e quindi la mia domanda è terribile lento

.

Grazie per qualsiasi suggerimento!

È stato utile?

Soluzione

Mi è stato dato un consiglio: è sufficiente avere tabella come questa: id, parola, word_in_lowercase .. è vero che i dati sono ridondanti ma per il resto soddisfa tutte le mie esigenze.

L'aggiornamento automatico delle word_in_lowercase può essere fatto tramite trigger o un po 'di programmazione.

Altri suggerimenti

Che tipo di regole di confronto impostato nelle tabelle in questione? Attualmente sto usando un sacco di tavoli con utf8_hungarian_ci a causa di questo è case-insensitive.

http://dev.mysql.com/doc /refman/5.0/en/case-sensitivity.html indica che le stringhe non binari sono case insensitive per impostazione predefinita. Hai provato a vedere che non funziona correttamente senza l'utilizzo inferiore ()?

Perché non utilizzare tutte le funzioni di ricerca testo di MySQL per la ricerca?

Per le attività come la vostra sto usando la partita contro la funzione.

Leggi le specifiche tecniche all'indirizzo mysql.com chiarire - collegamento

Un esempio:

SELECT * FROM customer WHERE status = 1 AND MATCH (person, city, company, zipcode, tags) AGAINST ('".$searchstring."' IN BOOLEAN MODE)

E questo sarà eseguito case insensitive.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top