Schema的优化和索引 - 选择最佳的数据类型 - 字符串类型
2009-09-02 00:00:00 来源:WEB开发网当最大列长度比平均长度要大的时候就值得使用VARCHAR.当很少更新字段的时候,存储碎片就不是一个问题。以及当你使用复杂的字符集如UTF-8时,每个字符都使用变量的字节数存储。
在5.0以及最新的版本,当你存储和获取值的时候,MySQL会保留尾部的空格。在4.1和更早的版本,MySQL去掉尾部空格。
CHAR
CHAR是定长的:MySQL总是分配指定的内存空间去存储字符。当存储了一个CHAR值,MySQL去掉尾部空格。值附加了空格是比较的需要。
如果你存储的字符串是非常短的,用CHAR是非常有用的。举个例子,存储密码的MD5值使用CHAR是个好的选择。因为这个MD5一直是定长的。如果数据经常修改的话CHAR要优于VARCHAR。因为定长的行并不会有存储残片。对于非常短的列,CHAR要比VARCHAR高效。一个CHAR(1)用来存储Y和N值。这只会使用1个字节,但是一个VARCHAR(1)会使用两个字节。有个字节用来保存它的长度信息。
这个行为让人有点困惑,因此我们举一个例子。首先,我们创建一个有单独CHAR(10)列的表以及存储一些数值。
mysql> CREATE TABLE char_test( char_col CHAR(10));
mysql> INSERT INTO char_test(char_col) VALUES
-> ('string1'), (' string2'), ('string3 ');
当我们获取这个值的时候,尾部空格被去掉了。
mysql> SELECT CONCAT("'", char_col, "'") FROM char_test;
+----------------------------+
| CONCAT("'", char_col, "'") |
+----------------------------+
| 'string1' |
| ' string2' |
| 'string3' |
+----------------------------+
更多精彩
赞助商链接