MySQL: зачем использовать UTF-8 - PullRequest
2 голосов
/ 24 января 2011

Это информативный вопрос, а не как.Я создаю базу данных в MySQL, которая имеет кодировку по умолчанию, установленную в UTF-8.Теперь некоторые из первичных ключей - это VARCHAR, которые принимают первичный ключ сверх предела в 1000 бит, потому что каждый символ, использующий utf-8, равен 3 байта.Каждый ключ имеет 255 символов, что приводит к 1530 байтам.

Так что, если бы я изменил кодировку на Latin-1, первичный ключ был бы меньше 1000 байтов и, как по волшебству, решение работало бы.Но в чем преимущество UTF-8, если оно есть?Почему он так популярен?

Ответы [ 5 ]

11 голосов
/ 24 января 2011

Прежде всего; Кажется, есть неправильное представление о двух:

Во-первых; UTF-8 использует только несколько байтов для символов, которые требуют этого; это кодировка VBR.

Во-вторых, 255, умноженное на 3, не 1530; это только половина.

В-третьих; помня, что я на самом деле не эксперт по базам данных; Первичные клавиши VARCHAR звучат как очень плохая идея.

причина популярности UTF-8; как было сказано @Tomas Kohl; является то, что он может представлять любой символ Unicode; но все еще позволяет представление ASCII (U + 127 и вниз) в отдельных байтах.

Если у вас есть любые международные амбиции что бы то ни было ; Никогда не используйте UTF-8 (или N'DUUH! Для краткости); или вы придете, чтобы пожалеть об этом.

Hard .

8 голосов
/ 24 января 2011

UTF-8 популярен, потому что он дает здравый смысл в обработке не английских символов. Он поддерживает различные неанглийские алфавиты, такие как арабский или китайский. Если у вашего приложения есть амбиции по локализации на другие языки, UTF-8 определенно избавит вас от многих головных болей. Просто найдите «кодировку символов», и вы увидите, сколько их существует.

Кроме того, я бы посоветовал вам сделать ваши первичные ключи максимально короткими (и в идеале числовыми) из соображений производительности.

1 голос
/ 24 января 2011

Это не звучит правильно.Если вы используете символы, присутствующие в наборе символов Latin-1, символы не будут использовать три байта в качестве UTF-8.Большинство символов будет использовать один байт, а некоторые могут использовать два байта.Я не проверял, но сомневаюсь, что любой символ из набора символов Latin-1 будет использовать три байта в качестве UTF-8.

Юникод полезен, когда вам нужно хранить большое разнообразие символов.Например, вы можете хранить текст на английском, китайском, греческом, русском и иврите в одном поле, что невозможно при любой однобайтовой кодировке.

1 голос
/ 24 января 2011

UTF-8 - это переменная кодировка байтов с количеством байтов, используемых для символа, в зависимости от этого конкретного символа. В случае символов, которые находятся в 7-битной кодировке ASCII (примерно английские буквенно-цифровые символы и некоторые знаки пунктуации), для кодировки UTF-8 используется только один байт (на самом деле это тот же байт). Если вы говорите «латынь1» и, следовательно, потенциально думаете о нескольких акцентированных символах, то это будут только 2-байтовые символы UTF-8.

Итак, когда вы говорите, что "каждый символ, использующий utf-8, равен 3 байтам", вы не правы - если только вы не говорили об экзотических символах, которых нет в latin1.

UTF-8 позволит вам использовать более широкий диапазон символов в будущем и, для текста на английском языке, займет немного (если есть) дополнительного пространства.

1 голос
/ 24 января 2011

Общий ответ на общий вопрос: http://en.wikipedia.org/wiki/UTF-8#Advantages_and_disadvantages

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...