2011-10-27 6 views
10

biegnę następujące select na MySQL 5.0.88 z utf8 charset i utf8_unicode_ci sortowania:MySQL - Dlaczego zasady Sortowanie ignorowane przez operatora LIKE dla niemiec SS charakteru

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ß  | 
+----+-------------+------------+ 

Według http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html niemiecki znak specjalny ß = ss dla utf8_unicode_ci, ale dlaczego działa tylko z operatorem "=", a nie z LIKE? Mam aplikację do książki telefonicznej i rozpaczliwie potrzebuję, aby obie rzeczy współpracowały ze sobą.

+0

co czy 'wyświetla zmienne takie jak '% sortowanie%'' i 'wyświetla pełne pola z twojego programu show? Zestawienie musi być identyczne w całym tekście. –

+0

sortowanie dla wszystkich pól varchar tabeli jest ustawione na "utf8_unicode_ci" + niektóre pola int bez sortowania w ogóle. – sub

+2

+1 bardzo interesujące pytanie, uwielbiam słyszeć odpowiedź. – Johan

Odpowiedz

9

Per standardu SQL, podobnie jak wykonuje dopasowanie na podstawie za charakter, więc może produkować wyniki różne od operatora = porównania:

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 | 
+--------------------------------------+ 

Źródło: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

+1

Dzięki Karolis. Wydaje się, że nie mogę mieć obu, które są do bani dla dużej aplikacji do książki telefonicznej z wieloma specjalnymi znakami. Może wyszukiwanie mysql FULLTEXT może być alternatywne. – sub

Powiązane problemy