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?
risposta
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).
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.
È 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.
Se si desidera la piegatura del caso, ma la sensibilità dell'accento, si prega di presentare una richiesta all'indirizzo http://bugs.mysql.com. –
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. –