2011-09-30 9 views
5

Come posso eseguire la ricerca utf8 sensibile al maiuscolo e al minuscolo in mysql? Utf8_bin è sensibile al maiuscolo/minuscolo e utf8_general_ci è insensibile all'aspetto.è possibile avere regole di confronto utf8 sensibili al maiuscolo e minuscolo?

+0

Non oggi ... Ma, se si desidera la piegatura del caso, ma la sensibilità dell'accento, si prega di presentare una richiesta all'indirizzo http://bugs.mysql.com. –

risposta

2

Non sembra esserci uno perché case sensitivity is tough to do in Unicode.

C'è un confronto utf8_general_cs ma sembra essere sperimentale e, in base a this bug report, non fa ciò che è previsto quando si utilizza LIKE.

Se i dati sono solo di umlaut occidentale (ad es. Umlaut inclusi in ISO-8859-1), è possibile fascicolare l'operazione di ricerca su latin1_german2_ci o creare una colonna di ricerca separata con esso (quella specifica fascicolazione è sensibile all'accento secondo lo this page; potrebbe anche essere lo latin1_general_ci, non lo so e non posso testarlo in questo momento).

2

Se si desidera differire "caffè" da "cafè" si può usare:

Select word from table_words WHERE Hex(word) LIKE Hex("café"); 

In questo modo si tornerà 'café'.

In caso contrario, se si utilizza:

Select word from table_words WHERE Hex(word) LIKE Hex("cafe"); 

tornerà caffetteria. Sto usando la latin1_german2_ci Collation.

0

È possibile utilizzare "hex" per rendere la ricerca sensibile all'access. Quindi aggiungi semplicemente lcase per renderlo nuovamente insensibile alle maiuscole/minuscole. In tal modo si otterrebbe:

SELECT name FROM people WHERE HEX(LCASE(name)) = HEX(LCASE("René")) 

Si buttano tutti gli indici fuori dalla finestra in questo modo. Se si vuole evitare di dover fare una scansione completa della tabella e si dispone di un indice sul "nome", la ricerca anche per la stessa cosa, senza l'esagono e LCase:

SELECT name FROM people WHERE name = "René" and HEX(LCASE(name)) = HEX(LCASE("René")) 

In questo modo l'indice su "name" volontà essere utilizzato per trovare solo le righe "René" e "Rene" e quindi il confronto con lo "hex" deve essere eseguito solo su quelle due righe anziché sulla tabella completa.

+0

Se si desidera la piegatura del caso, ma la sensibilità dell'accento, si prega di presentare una richiesta all'indirizzo http://bugs.mysql.com. –

Problemi correlati