默认字符集的重要性

时间:2011-01-20 07:56:43

标签: mysql encoding

我有一个4 GB的表,默认的字符集设置为utf8虽然我只保存latin1个字符。 我在测试机器上使用alter table语句将其更改为latin1。 索引文件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)

1 个答案:

答案 0 :(得分:1)

性能可能是你应该关心的最后一件事。您使用客户端 app 的字符集是什么?写的信息是什么自然语言?这些是你必须提出的问题。

如果您坚持使用Latin1,您将无法存储日语字符,也会存储一些常见的字符,例如符号。另一方面,如果您的应用程序无法处理多字节输入,则在数据库中使用UTF-8可能无用(或完全错误)。