数据类型
CHAR(4):无论插入值的长度是多少,占用的存储空间都是 4 个字节。
VARCHAR(4):占用的字节数为实际长度加 1。
TEXT 类型:保存大文本数据。
例如,文章内容、评论等比较长的文本。
保存的最大字符数量取决于字符串实际占用的字节数。
空格问题:
CHAR 和 VARCHAR 类型在插入数据时,若字符串末尾有空格,
CHAR 类型会自动去掉空格后保存,而 VARCHAR、TEXT 类型会保留空格。
对于空格的比较:
使用“=”等运算符对 CHAR、VARCHAR、TEXT 进行比较时,
字符串末尾的空格会被忽略。
例如:
使用 WHERE 查询 'a' 字符串,查询结果中可能包含 a 后面有空格的情况;
若查询条件字符串末尾有空格(如 'a '),空格也会被忽略。
不区分大小写:
默认情况下创建的数据库和表使用的校对集(latin1swedishci)
对大小写不敏感,因此 CHAR、VARCHAR、TEXT、ENUM、SET
都不区分大小写。
例如:
WHERE 查询 'a' 字符串,则“a”和“A”都会被查询出来。
区分大小写:
BINARY、VARBINARY、BLOB 类型区分大小写,它们使用二进制方式保存数据。
长度限制:
MySQL 默认规定一条记录的最大长度是 65535 字节。
一般来说,字段分配的存储空间和额外开销加在一起不能超过 65535 字节。
如果超过了这个限制,会创建失败,提示“Row size too large”。
(在 SQL 模式为严格模式的情况下)
长度限制:
TEXT 和 BLOB 类型字段的存储空间不受此限制,
它们只占用额外开销(大约 12 字节左右)。
长度限制:
在没有超过 65535 限制的情况下:
CHAR 字段的 M 最大值为 255;
VARCHAR 字段的 M 的最大值取决于字符集。
长度限制:
以下是常用的 字符集 和对应的 M 最大值。
latin1:65533 (默认字符集)
gbk:32766
utf8:21844
长度限制:
若表中只有一个字段且设置了非空约束,M 可达到最大值,
否则 M 的最大值会减小。
latin1
mysql> CREATE TABLE my_varchar1 (c VARCHAR(65533) NOT NULL);
Query OK, 0 rows affected (0.01 sec)
utf8
mysql> CREATE TABLE my_varchar2 (c VARCHAR(21844) CHARSET utf8);
Query OK, 0 rows affected (0.02 sec)
执行效率对比:
TEXT 和 BLOB 不如 CHAR、VARCHAR 类型,
建议只有当需要保存大量数据时,才选择使用 TEXT 或 BLOB 类型。
收工
版权声明: 本文为 InfoQ 作者【在即】的原创文章。
原文链接:【http://xie.infoq.cn/article/1061e196d491c82e7c13f822d】。文章转载请联系作者。
评论