10.8.6 Примеры эффекта сортировки
Пример 1: Сортировка немецких умляутов
Предположим, что столбец X в таблице T имеет следующие значения столбца:
Muffler
Müller
MX Systems
MySQL
Предположим также, что значения столбца извлекаются с помощью следующего оператора:
SELECT X FROM T ORDER BY X COLLATE collation_name;
В следующей таблице показан порядок значений после использования ORDER BY с различными сортировками.
latin1_swedish_ci | latin1_german1_ci | latin1_german2_ci |
|---|---|---|
| Muffler | Muffler | Müller |
| MX Systems | Müller | Muffler |
| Müller | MX Systems | MX Systems |
| MySQL | MySQL | MySQL |
Символ, вызывающий разные порядки сортировки в этом примере, — это U с двумя точками над ним (ü), который немцы называют “U-умлаут.”
Первый столбец показывает результат использования
SELECTс правилом сортировки шведского/финского языка, которое указывает, что U-умлаут сортируется вместе с Y.Второй столбец показывает результат использования
SELECTс немецким правилом DIN-1, которое указывает, что U-умлаут сортируется вместе с U.Третий столбец показывает результат использования
SELECTс немецким правилом DIN-2, которое указывает, что U-умлаут сортируется вместе с UE.
Пример 2: Поиск немецких умляутов
Предположим, что у вас есть три таблицы, которые различаются только используемым набором символов и сортировкой:
mysql> SET NAMES utf8;
mysql> CREATE TABLE german1 (
c CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_german1_ci;
mysql> CREATE TABLE german2 (
c CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_german2_ci;
mysql> CREATE TABLE germanutf8 (
c CHAR(10)
) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Каждая таблица содержит две записи:
mysql> INSERT INTO german1 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO german2 VALUES ('Bar'), ('Bär');
mysql> INSERT INTO germanutf8 VALUES ('Bar'), ('Bär');
Две из вышеперечисленных сортировок имеют равенство A = Ä, а одна не имеет такого равенства (latin1_german2_ci). По этой причине вы получите такие результаты при сравнении:
mysql> SELECT * FROM german1 WHERE c = 'Bär';
+------+
| c |
+------+
| Bar |
| Bär |
+------+
mysql> SELECT * FROM german2 WHERE c = 'Bär';
+------+
| c |
+------+
| Bär |
+------+
mysql> SELECT * FROM germanutf8 WHERE c = 'Bär';
+------+
| c |
+------+
| Bar |
| Bär |
+------+
Это не ошибка, а следствие свойств сортировки latin1_german1_ci и utf8_unicode_ci (показная сортировка выполняется в соответствии с немецким стандартом DIN 5007).
© 2025 Oracle
Licensed under the GPLv2 License.