Intereting Posts
установка значения по умолчанию суперглобального Вызов неопределенной функции dl () фабрикатор получает сообщение об авторе из истории фида для историй, которые относятся к проблемам, комментариям и аудитам Laravel 4 на встроенном веб-сервере PHP (CGI) вместо Apache Почему символы escape добавляются к значению скрытого ввода Как избежать кавычек при вставке в базу данных с помощью PHP yii2 radio inline Html helper Создайте репозиторий доктрины с зависимостями (инъекцией зависимостей) в ZF2 Предупреждение: mysqli_stmt_bind_param () ожидает, что параметр 1 будет mysqli_stmt, boolean задан в Используйте PHP для создания эскизов. (Обрезано до квадрата) PHP CLI имеет задержку в несколько секунд Как загрузить фотографию в конкретный альбом, а если нет, создайте этот альбом? UPDATE concat и переменные Получить текст вне элементов PHP preg_split при сохранении разделителя в начале элемента массива

Разница между сортировкой utf8 между юникодом и датским языком

Ну привет. Я меняю кодировку базы данных с 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
  • выберите все записи, упорядоченные по символу ASC
  • измените сортировку таблицы на 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, ошибочен в моем опыте.