我有一个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)
答案 0 :(得分:1)
性能可能是你应该关心的最后一件事。您使用客户端 app 的字符集是什么?写的信息是什么自然语言?这些是你必须提出的问题。
如果您坚持使用Latin1,您将无法存储日语字符,也会存储一些常见的字符,例如€
符号。另一方面,如果您的应用程序无法处理多字节输入,则在数据库中使用UTF-8可能无用(或完全错误)。