我有一个4 GB的表,默认字符集设置为utf8,尽管我只保存latin1字符。我在测试机器上使用alter table语句将其更改为latin1。在数据文件log_details.MYD中没有注意到差异时,索引文件log_details.MYI减少了5%
我有几个问题:
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)发布于 2011-01-20 19:34:52
性能可能是您最不应该关心的事情。您的客户端应用程序使用的是什么字符集?这些信息是用什么自然语言写的?这些都是你必须提出的问题。
如果您坚持使用Latin1,您将无法存储日语字符,但也无法存储一些常见的字符,如€符号。另一方面,如果您的应用程序不能处理多字节输入,那么在数据库中使用UTF-8可能是无用的(或者完全错误的)。
https://stackoverflow.com/questions/4744677
复制相似问题