MySQL. Почему правила COLLATION игнорируются оператором LIKE для немецкого символа ß
Я запускаю следующие операторы select в MySQL 5.0.88 с помощью utf8 charset и utf8_unicode_ci:
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ß |
+----+-------------+------------+
В соответствии с http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html немецкий специальный char ß = ss для utf8_unicode_ci, но почему он работает только с оператором "=", а не с LIKE? У меня есть приложение для телефонной книги, и мне отчаянно нужны обе вещи, которые работают вместе.
Ответы
Ответ 1
В стандарте SQL LIKE выполняет сопоставление по каждому символу, таким образом, он может давать результаты, отличные от оператора сравнения:
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 |
+--------------------------------------+
Источник: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like