Важность набора символов по умолчанию

У меня есть таблица размером 4 ГБ, и для кодировки по умолчанию установлено значение utf8, хотя я сохраняю только символы latin1. Я изменил его на latin1, используя оператор alter table на тестовой машине. Индексный файл log_details.MYI был уменьшен на 5%, в то время как в файле данных log_details.MYD не было замечено никаких изменений.

У меня есть несколько вопросов:

1) Стоит ли переделывать таблицу на производстве? стоит ли оно того?

2) Улучшит ли это скорость выбора?

3) Думаю, у меня могут быть более длинные индексы, если я изменю кодировку по умолчанию на latin1. Любое другое преимущество?

Я также заметил, что после изменения набора символов по умолчанию с помощью оператора alter table типы столбцов varchar были изменены автоматически. Item_ID varchar(32) набор символов utf8 Как этого избежать?

mysql> create table char_test( id int, Item_ID varchar(32) ) default charset = utf8;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into char_test values (1, 'abc');
Query OK, 1 row affected (0.00 sec)

mysql> show create table char_test\G
*************************** 1. row ***************************
       Table: char_test
Create Table: CREATE TABLE `char_test` (
  `id` int(11) default NULL,
  `Item_ID` varchar(32) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> alter table char_test default charset = latin1;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> show create table char_test\G
*************************** 1. row ***************************
       Table: char_test
Create Table: CREATE TABLE `char_test` (
  `id` int(11) default NULL,
  `Item_ID` varchar(32) character set utf8 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

person shantanuo    schedule 20.01.2011    source источник


Ответы (1)


Производительность, вероятно, последнее, о чем вы должны заботиться. Какой набор символов использует ваше клиентское приложение? На каком естественном языке написана информация? Это те вопросы, которые вы должны задать.

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

person Álvaro González    schedule 20.01.2011