2011-01-20 73 views
0

我有一個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

表現可能是您應該關心的最後一件事。你是什​​麼字符集客戶端應用程序使用?信息上寫的是什麼自然語言?這些是你必須提出的問題。

如果你堅持Latin1,你將無法存儲日文字符,但也可以像符號這樣的常見字符。另一方面,如果您的應用程序無法處理多字節輸入,則在數據庫中使用UTF-8可能無用(或明顯錯誤)。