2014-02-12 4 views
0

Мое понимание с латино против utf8 как согласно ниже:Latin Vs utf8 Charset и использование индекса (MySQL 5.5)

«латинскими поддерживает только латинские символы (например, английский), но utf8 поддерживает все международные языки, как французский, Chineese, арабский и т. д. (даже не поддерживает полностью, поскольку он использует 3 байта на символ, в то время как он должен использовать 4 байта на символ, чтобы ухаживать за всем международным символом utf8). В соответствии со стандартным латином хранится 1 символ в 1 байт, а utf8 1 символ в 1-3 байты, но если мы сохраним все символы в латинском языке даже в столбце типа utf8, тогда он сохранит 1 символ в 1 байт. "

latin vs utf8 Индекс: «Значение столбцов принимает байт в соответствии с символом в столбцах и в соответствии с типом кодировки, но индекс всегда хранится в байтах».

Может кто-нибудь прояснить мои ниже запросы, я буду очень благодарен.

Предположим, что есть столбец заголовка varchar (250), и на нем есть индекс, как индекс таблицы myter addter (заголовок (16)) в таблице типов символов utf8;

Если в столбцах содержится укус «Это мое название», которое содержит 16 символов и все латинские. затем ясно ниже запросов:

1) Поскольку строка содержит 16 символов и все являются латинскими, означает, что она должна хранить только 16 байт, даже таблица charset - utf8 или еще.

2) Указатель на 16 байт достаточно, чтобы позаботиться об этой 16-символьной строке или еще.

Спасибо,

Зафар

ответ

1

1) Да. 2) Да.

Обратите внимание, что «латинский» не является кодировкой символов. Кодировки, которые люди обычно называют латинскими - что-то вроде «latin1» MySQL, включают символы, которым требуется 2 или 3 байта при кодировании в UTF-8. Это символы ASCII, которые могут храниться с одним байтом в UTF-8.

+0

@Tim: Спасибо за этот пояснительный ответ. –

+0

Joni, Спасибо за вашу помощь. –

1

1) символы latin1 (ISO-8859-1) могут содержать более 1 байт в utf8. Если символы ASCII (как в строке примера), для каждого символа в utf8 потребуется только 1 байт. Если они не ASCII, но все еще latin1, тогда потребуется больше байтов.

2) Опять же, если символы в 16-байтовой строке всегда ASCII, тогда 16 байтов в индексе utf8 будут покрывать его. Однако, обратите внимание, что для индексов в столбце char/varchar/text длина индекса равна символов не байтов. Таким образом, (16) будет означать, что ваш индекс может быть до 48 байтов для utf8. Кроме того, определение столбца одинаковое (поэтому varchar (250) - 250 символов, который до 750 байтов для utf8).

Обратите внимание, что MySQL также поддерживает кодировку utf8mb4, которая является правильной UTF-8, то есть символы могут занимать до 4 байтов для кодирования. Однако, если вы используете это и хотите более длинные индексы, вам нужно будет возиться с настройками/созданием таблицы и строк и настройками InnoDB, поскольку индексы и т. Д. Будут занимать больше, чем стандартные 767 байт (например, 250-символьный индекс потребует пространства для 1000 байт).

Смежные вопросы