Какая самая лучшая сортировка MySQL для немецкого языка? - PullRequest
17 голосов
/ 03 апреля 2011

Я создаю веб-сайт на немецком языке, поэтому я буду использовать такие символы, как ä, ü, ß и т.д.

Ответы [ 3 ]

24 голосов
/ 03 апреля 2011

Этот ответ устарел.Для полной поддержки смайликов см. этот ответ .

В качестве набора символов, если возможно, определенно UTF-8.

Как сопоставление - это немного неприятно для языков со специальными символами.Существуют различные типы сопоставлений.Все они могут хранить все умлауты и другие символы, но отличаются в том, как они относятся к умлаутам в сравнениях, т. Е. Является ли

u = ü 

истинным или ложным;и в сортировке (где в алфавитах умлауты расположены в порядке сортировки).

Короче говоря, ваша лучшая ставка - либо

utf8_unicode_ci

Это позволяет осуществлять поиск без учета регистра;Он обрабатывает ß как ss и использует сортировку DIN-1.К сожалению, как и все недвоичные параметры сортировки Unicode, он обрабатывает u = ü, что является ужасным неудобством, поскольку поиск по «Muller» также возвращает «Müller».Вам придется обойти это, установив сопоставление с умлаутом в реальном времени.

или utf8_bin

В этом сопоставлении нет проблемы u = ü, но возможен только поиск с учетом регистра.

Я неполностью уверен, есть ли какие-либо другие побочные эффекты при использовании двоичного сопоставления;Я задал вопрос об этом здесь .


Эта страница руководства mySQL дает хороший обзор различных сопоставлений и последствий, которые они приносят в повседневном использовании.

Здесь - общий обзор доступных параметров сортировки в mySQL.

6 голосов
/ 18 января 2018

Для поддержки полного стандарта UTF-8 вы должны использовать кодировку utf8mb4 и сопоставление utf8mb4_unicode_ci в MySQL!

Примечание: MySQL поддерживает только 1-3-байтовые символы при использовании так называемой utf8 кодировки! Вот почему современные Emojis не поддерживаются, так как они используют 4 байта!

Единственный способ полностью поддержать стандарт UTF-8 - изменить кодировку и сопоставление таблиц ALL и самой базы данных на utf8mb4 и utf8mb4_unicode_ci. Более того, база данных connection также должна использовать utf8mb4.

Сервер mysql должен использовать utf8mb4 в качестве кодировки по умолчанию, которую можно настроить вручную в /etc/mysql/conf.d/mysql.cnf

.
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
# character-set-client-handshake = FALSE  ## better not set this!
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

Существующие таблицы можно перенести в utf8mb4 с помощью следующего оператора SQL:

ALTER TABLE <table-name> CONVERT TO 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

Примечание:

  • Чтобы убедиться, что любые JOIN-соединения между столбцами таблиц не будут замедлены кодировками charset, ВСЕ таблицы должны быть изменены!
  • Поскольку длина индекса в MySQL ограничена, общее количество символов в строке индекса должно быть умножено на 4 байта и должно быть меньше 3072

Когда опция конфигурации innodb_large_prefix включена, это ограничение длины увеличено до 3072 байтов для таблиц InnoDB, которые используют ДИНАМИЧНЫЙ и СЖАТЫЙ форматы строк.

Чтобы изменить кодировку и параметры сортировки базы данных по умолчанию, выполните следующую команду:

ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Поскольку utf8mb4 полностью обратно совместим с utf8, моджибаке или другие формы потери данных не должны возникать.

3 голосов
/ 03 апреля 2011

utf-8-general-ci или utf-8-unicode-ci.

Чтобы узнать разницу: UTF-8: Общее? Бен? Unicode

...