2011-10-27 10 views
10

estoy corriendo las siguientes sentencias de selección de MySQL 5.0.88 con el juego de caracteres UTF-8 y el cotejo utf8_unicode_ci:MySQL - ¿Por qué reglas de comparación ignorados por el operador como por el carácter ß alemana

SELECT * FROM table WHERE surname = 'abcß'; 

+----+-------------------+------+ 
| id | forename | surname | 
+----+-------------------+------+ 
| 1 | a   | abcß  | 
| 2 | b   | abcss  | 
+----+-------------+------------+ 

SELECT * FROM table WHERE surname LIKE 'abcß'; 

+----+-------------------+------+ 
| id | forename | surname | 
+----+-------------------+------+ 
| 1 | a   | abcß  | 
+----+-------------+------------+ 

De acuerdo con http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html el alemán especial char ß = ss para utf8_unicode_ci, pero ¿por qué solo funciona con el operador "=" y no con LIKE? Tengo una aplicación para la guía telefónica y necesito desesperadamente que ambas cosas funcionen juntas.

+0

lo ¿'muestra variables como '% collation%'' y 'show full fields from yourtable' show? La intercalación debe ser idéntica en todas partes. –

+0

la intercalación de todos los campos varchar de la tabla se establece en "utf8_unicode_ci" + algunos campos int sin intercalación en absoluto. – sub

+2

+1 pregunta muy interesante, me encantaría escuchar la respuesta. – Johan

Respuesta

9

por el estándar SQL, COMO, se adapta en función de cada carácter, por lo que puede producir resultados diferentes del operador = comparación:

mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci; 
+-----------------------------------------+ 
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci | 
+-----------------------------------------+ 
|          0 | 
+-----------------------------------------+ 
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci; 
+--------------------------------------+ 
| 'ä' = 'ae' COLLATE latin1_german2_ci | 
+--------------------------------------+ 
|         1 | 
+--------------------------------------+ 

Fuente: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

+1

Gracias Karolis. Parece que no puedo tener ambas cosas, lo cual es una mierda para una gran aplicación de la guía telefónica con muchos caracteres especiales. Tal vez la búsqueda de MySQL FULLTEXT podría ser una alternativ. – sub

Cuestiones relacionadas