Существует ли сортировка utf8_unicode_cs?
Кто-нибудь знает, существует ли сортировка utf8_unicode_cs для MySQL? До сих пор мои поиски высыхали. Если он просто еще не существует, достаточно ли прямо создать его? Или каким-то образом используйте utf8_unicode_ci или utf8_bin, но "имитируйте" то, что можно было бы ожидать от сортировки utf8_unicode_cs?
Ответы
Ответ 1
Я столкнулся с той же проблемой, и после некоторого Googling кажется, что MySQL не включает его. Чтобы "имитировать его", как вы выразились,
1) Чтобы обеспечить чувствительность к регистру в БД: установите столбец таблицы в utf8_bin
сопоставление
Это позволяет:
- strict SELECTs:
SELECT "Joe"
НЕ будет возвращать строки с "joe" / "joE" / "jOe" /etc
- Строгий индекс UNIQUE: столбец с индексом UNIQUE будет рассматривать разности случаев как разные значения. Например, если используется сортировка utf8_unicode_ci, вставка "Joe" в таблицу, которая уже имеет "joe", вызывает ошибку "Duplicate key". Если ut8_bin используется, вставка "Joe" будет работать нормально.
2) Чтобы получить правильный порядок в результатах: добавьте сопоставление в запрос SQL:
SELECT ... ORDER BY column COLLATE utf8_unicode_ci
Ответ 2
Это старый вопрос, но, похоже, его никто не заменит, поэтому я решил, что стоит сообщить, что все изменилось.
MySQL версии 8 теперь имеет следующие параметры сортировки для utf8mb4:
utf8mb4_0900_ai_ci
utf8mb4_0900_as_ci
utf8mb4_0900_as_cs
... and many language-specific variants of same.
(Насколько я знаю, нет _ai_cs, но в любом случае это было бы менее полезно: мало причин группировать [a] и [a-острый], а затем отдельно группировать [A] и [A-острый]).
Цель гипотетического исходного вопроса "utf8_unicode_cs" выполняется utf8mb4_0900_as_cs. (0900 означает, что он использует Unicode v 9.0.0, а не 4.0.0, используемый utf8_unicode_ci.)
Чтобы использовать их, вам нужно изменить поле с utf8 на utf8mb4 - но в любом случае это хорошая идея, потому что старая кодировка 3-byte-max не может обрабатывать, например, эмодзи и другие не-BMP символы.
Источник: https://dev.mysql.com/doc/refman/8.0/en/charset-mysql.html