Почему MySQL использует latin1_swedish_ci как значение по умолчанию?

Кто-нибудь знает, почему latin1_swedish является значением по умолчанию для MySQL. Мне кажется, что UTF-8 будет более совместимым?

Обычно выбираются значения по умолчанию, потому что они являются наилучшим универсальным выбором, но в этом случае не похоже, что они сделали.

Ответ 1

Насколько я вижу, latin1 был набором символов по умолчанию в течение до многобайтовых времен, и похоже, что это было продолжено, вероятно, из-за нисходящей совместимости (например, для более старых операторов CREATE, которые не задавали сортировку).

От здесь:

Что 4.0 Делал

MySQL 4.0 (и более ранние версии) поддерживал только то, что составляло объединенное понятие набора символов и сортировки с однобайтовыми кодировками символов, которое было указано на уровне сервера. По умолчанию был latin1, что соответствует набору символов latin1 и сортировке latin1_swedish_ci в MySQL 4.1.

Что касается swedish, я могу только догадываться, что это потому, что MySQL AB является шведским. Я не вижу другой причины для выбора этой сортировки, она поставляется с определенными специфическими сортировочными причудами ( "Я пришел после Z, я думаю" ), но они не соответствуют международному стандарту.

Ответ 2

latin1 - это набор символов по умолчанию. MySQL latin1 совпадает с набором символов Windows cp1252. Это означает, что он совпадает с официальным стандартом ISO 8859-1 или IANA (Internet Assigned Numbers Authority) latin1, за исключением того, что IANA latin1 обрабатывает кодовые точки между 0x80 и 0x9f как "undefined", тогда как cp1252 и, следовательно, MySQL latin1, назначьте символы для этих позиций.

из

http://dev.mysql.com/doc/refman/5.0/en/charset-we-sets.html

Может помочь вам понять, почему.

Ответ 3

Использование однобайтовой кодировки имеет некоторые преимущества перед многобайтовыми образами, например. длина строки в байтах равна длине этой строки в символах. Поэтому, если вы используете такие функции, как SUBSTRING, это не является интуитивно понятным, если вы имеете в виду символы или байты. Кроме того, по тем же причинам, это требует значительного изменения внутреннего кода для поддержки многобайтовых кодировок.

Ответ 4

Наиболее странные черты такого рода историчны. Они сделали это так давно, и теперь они не могут изменить его, не нарушая приложения в зависимости от этого поведения.

Возможно, UTF8 не был популярен тогда. Или, возможно, MySQL не поддерживает кодировки, где затем кодируются несколько байтов на символ.