Существует ли сортировка 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