11.4.1 The CHAR and VARCHAR Types
char和varchar这两种数据类型很相似,但是他们在数据的存取上都存在着一定的差异,这种差异主要是存取数据的最大长度及是否存在空格填充的问题。
char和varchar指定的长度表示你想最多存储多少个字符,比如,char(30)表示你能存30个字符
char列的长度在你建表的时候就确定了,长度可设置范围是0到255,存储char列的值的时候,他会采用空格右填充的方式补齐最大长度,如果没有启用PAD_CHAR_TO_FULL_LENGTH参数的话,查询的时候这些空白字符会被截掉。
补:PAD_CHAR_TO_FULL_LENGTH参数
=======================================
默认情况下,检索char列值得时候填充的空格会被截取掉,但是如果启用PAD_CHAR_TO_FULL_LENGTH参数的话,该列的值会已完整长度的形式输出不会被截断掉,但是这个设置对varchar列并没有影响,空格会被原样输出。
CREATE TABLE t1 (c1 CHAR(10),c2 VARCHAR(10));
INSERT INTO t1 (c1,c2) VALUES('xy','xy');
SET sql_mode = '';
SELECT c1, CHAR_LENGTH(c1),c2,CHAR_LENGTH(c2) FROM t1;
c1 CHAR_LENGTH(c1) c2 CHAR_LENGTH(c2)
------ --------------- ------ -----------------
xy 2 xy 2
SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
SELECT c1, CHAR_LENGTH(c1),c2,CHAR_LENGTH(c2) FROM t1;
c1 CHAR_LENGTH(c1) c2 CHAR_LENGTH(c2)
---------- --------------- ------ -----------------
xy 10 xy 2
=======================================
varchar列的值得长度是可变的,范围可以从0到65535,但是这个值受行的最大长度和列上所使用的字符集的限制(65535字节,行的最大允许长度)。 http://dev.mysql.com/doc/refman/5.6/en/column-count-limit.html
与char不同的是,varchar类型存储值的时候带有一个1到2个字节的前缀,前缀的长度跟存储值得长度相关,如果不超过255个字节,那么就加一个字节,如果超过255个字节,就加两个字节。
如果你没有启用严格的SQL模式,而你插入的值超过列的最大长度值,那么插入的数据会被截断掉并发出一个警告,但是如果启用了严格SQL mode,当被截断的字符为非空字符的时候,给你返回的是一个错误阻止你插入改值。
对于varchar字段,不管用的是不是严格的sql mode,如果填充空格后长度超过了列本身能存储的长度,那么在数据插入之前会被截断掉,
并发出一个警告,
阅读(669) | 评论(0) | 转发(0) |