2011-09-30 11 views
5

¿Cómo puedo realizar una búsqueda de utf8 sensible a mayúsculas y sin distinción de mayúsculas y minúsculas en MySQL? Utf8_bin distingue entre mayúsculas y minúsculas, y utf8_general_ci es insensible a los acentos.es posible tener una intercalación utf8 sensible al acento y sin distinción de mayúsculas y minúsculas en mysql?

+0

Hoy no ... Pero, si desea doblar caso, pero la sensibilidad de acento, por favor presente una solicitud en http://bugs.mysql.com. –

Respuesta

2

No parece haber ninguno porque case sensitivity is tough to do in Unicode.

Hay una intercalación utf8_general_cs pero parece ser experimental, y de acuerdo con this bug report, no hace lo que se espera al usar LIKE.

Si sus datos consisten solamente en diéresis occidentales (es decir, diéresis que están incluidas en ISO-8859-1), puede cotejar su operación de búsqueda en latin1_german2_ci o crear una columna de búsqueda separada con esa colación específica es acento sensible de acuerdo con this page; latin1_general_ci podría ser así, no lo sé y no puedo probar en este momento).

2

Si desea diferir "café" de "café" Usted puede utilizar:

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

De esta manera se volverá 'café'.

De lo contrario, si usted utiliza:

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

volverá cafetería. Estoy usando la intercalación latin1_german2_ci.

0

Puede usar "hex" para hacer que la búsqueda sea sensible al acento. Luego, simplemente agregue lcase para que no sea sensible a mayúsculas. Entonces eso daría:

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

Usted tira todos sus índices fuera de la ventana así. Si usted quiere evitar tener que hacer un escaneo completo de tabla y tiene un índice en "nombre", también buscar lo mismo sin el hexágono y lcase:

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

De esta manera el índice en "name" voluntad se utilizará para encontrar, por ejemplo, solo las filas "René" y "Rene" y luego la comparación con "hex" debe hacerse solo en esas dos filas en lugar de en la tabla completa.

+0

Si desea doblar caso, pero la sensibilidad de acento, presente una solicitud en http://bugs.mysql.com. –

Cuestiones relacionadas