WEB开发网
开发学院数据库MySQL Schema的优化和索引 - 选择最佳的数据类型 - 字符... 阅读

Schema的优化和索引 - 选择最佳的数据类型 - 字符串类型

 2009-09-02 00:00:00 来源:WEB开发网   
核心提示: 当最大列长度比平均长度要大的时候就值得使用VARCHAR.当很少更新字段的时候,存储碎片就不是一个问题,Schema的优化和索引 - 选择最佳的数据类型 - 字符串类型(2),以及当你使用复杂的字符集如UTF-8时,每个字符都使用变量的字节数存储,我们创建一个有单独CHAR(10)列的表以及存储

当最大列长度比平均长度要大的时候就值得使用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' |

+----------------------------+

Tags:Schema 优化 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接