CHAR 和VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR 和VARCHAR 之间的差别:
值 | char(4) | 存储需求 | varchar(4) | 存储需求 |
'' | ' ' | 四个字节 | ' ' | 一个字节 |
'ab' | ' ' | 四个字节 | 'ab ' | 三个字节 |
'abcd' | 'abcd' | 四个字节 | 'abcd ' | 五个字节 |
‘abcdefgh' | 'abcd' | 四个字节 | 'abcd ' | 五个字节 |
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同
CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节
同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)
从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR 列删除了尾部的空 格。通过下面的例子说明该差别:
mysql>CREATE TABLE vc(v VARCHAR(4), c CHAR(4))
mysql> INSERT INTO vc VALUES ('ab ', 'ab '); Query OK, 1 row affected (0.00 sec) mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc; +-------------------------+---------------------------+ | CONCAT(v, '+') | CONCAT(c, '+') | +-------------------------+---------------------------+ | ab + | ab+ | +-------------------------+---------------------------+ 1 row in set (0.00 sec)