Ну привет. Я меняю кодировку базы данных с latin1_sweedish_ci
на utf8
. Я всегда использовал utf8_danish_ci
потому что он наиболее близок к норвежскому стилю – я думаю.
Но как насчет utf8_general_ci
и utf8_unicode_ci
?
Некоторое время назад; Было предпочтительнее использовать _general_ci
для лучшей / более быстрой работы, а _unicode_ci
для большей точности из-за алгоритма сортировки является более сложным в последнем. Но поскольку скорость / производительность больше не проблема – или не так много, проблема в большинстве случаев больше – _unicode_ci
в порядке для использования в большинстве ситуаций?
Но как _unicode_ci
отличается от _danish_ci
?
Это последние три буквы æ
, ø
, å
в нордическом алфавите, которые принимаются во внимание?
Большинство сопоставлений (один против другого), которые я могу найти, это только между _general_ci
и _unicode_ci
.
Любой, кто знает о каких-либо примерах использования _unicode_ci
или когда использовать _danish_ci
, будет высоко оценен …
Короче говоря, если ваше приложение многоязычно и хранит несколько языков в одних и тех же таблицах, вы в основном зависаете и должны беспокоиться о сортировке / сопоставлении за пределами базы данных – тогда utf8_general_ci так же хорош, как и любой другой.
Если он поддерживает только один язык, вы сделаете все возможное, установив правильную сортировку на уровне db – в вашем случае, utf8_danish_ci действительно, так как это то же самое, что и норвежский, если википедия – это что-то, что нужно сделать.
Если вы хотите больше узнать о сопоставлении, в документах ICU есть яркие примеры того, насколько тернист этот материал. Цитируя широко:
http://userguide.icu-project.org/collation
[H] ere – некоторые из способов, которыми языки меняются в упорядочивающих строках:
Буквы AZ могут быть отсортированы в другом порядке, чем на английском. Например, на литовском языке «y» сортируется между «i» и «k».
Сочетания букв можно трактовать так, как если бы они были одной буквой. Например, в традиционном испанском языке «ch» рассматривается как одна буква и сортируется между «c» и «d».
Акцентированные буквы можно рассматривать как второстепенные варианты безударной буквы. Например, «é» можно рассматривать эквивалентно «e».
Акцентированные буквы можно рассматривать как разные буквы. Например, «Å» на датском языке рассматривается как отдельное письмо, которое сортируется сразу после «Z».
Несостоявшиеся буквы, которые считаются отличными на одном языке, могут быть нечеткими в другом. Например, буквы «v» и «w» являются двумя разными буквами в соответствии с английским. Однако «v» и «w» считаются вариантами одного и того же письма на шведском языке.
Письмо можно трактовать так, как если бы это были две буквы. Например, в традиционном немецком «ä» сравнивается, как будто это «ae».
Тайский требует, чтобы порядок определенных букв был отменен.
Французский требует, чтобы буквы, отсортированные с акцентами в конце строки, сортировались перед акцентами в начале строки. Например, слово «côte» сортируется до «coté», потому что острый акцент на последнем «e» более значителен, чем огибающий на «o».
Иногда строчные буквы сортируются до прописных букв. Реверс требуется в других ситуациях. Например, строчные буквы обычно сортируются до заглавных букв на английском языке. Письма в латышском письме – полная противоположность.
Даже на том же языке различным приложениям могут потребоваться разные порядки сортировки. Например, в немецких словарях «öf» будет предшествовать «из». В телефонных книгах ситуация противоположная.
Порядок сортировки может меняться со временем из-за правительственных постановлений или новых символов / сценариев в Юникоде.
Пожалуйста, имейте в виду, что Collation! = Кодирование.
Кодирование – это сопоставление между целыми числами (которые все, что база данных может хранить в конце дня), и человеческие читаемые графические представления символов.
Сортировка – это правило упорядочения, используемое для сортировки символов в соответствии с обычным алфавитным порядком данного языка. Обратите внимание, что это упорядочение не отражает фактический порядок внутреннего, числового представления.
Ваш вопрос сводится к следующему: какой алфавитный порядок вы должны использовать в своем приложении? На это нельзя ответить.
Я не уверен на 100%, но я считаю, что utf8_danish_ci
является подмножеством (либо) utf8
(сопоставление).
При этом, если ваша база данных закодирована в utf8
, нет смысла использовать датскую сортировку.
Быстрый тест (поскольку я спешу, и я не могу найти список сортировки для utf8_unicode
):
utf8_danish_ci
utf8_general_ci
или предпочтительно utf8_unicode_ci
Ссылки по теме.
Моя гипотеза была неправильной.
Я сделал несколько тестов, и, по-видимому, utf8_unicode_ci
не сортируется в том же порядке, поэтому никогда не думает.
Collation определяет оба символа, которые могут быть сохранены в таблице, а также порядок символов. Выбор чего-либо, начиная с utf8, должен охватывать большинство потребностей в хранении символов, поэтому utf8_general_ci – хороший выбор. Если вы собираетесь сосредоточиться на одном языке, вы можете выбрать локальную сортировку, такую как utf8_danish_ci, что означает, что порядок будет датским символом и регистрозависимым (ci part).
Для многоязычного приложения вы можете хранить поля с помощью utf8_general_ci, и когда вам нужна определенная сортировка или сравнение в соответствии с вашим предпочтительным языком, добавьте слово COLLATE к вашему запросу с предпочтительной сортировкой из https: //dev.mysql. ком / док / RefMan / 5,6 / о / кодировки , юникод-sets.html
Ответ, предоставленный @Denis выше, утверждая, что вы не можете сортировать в MySQL, ошибочен в моем опыте.