MySql:char与varchar

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)

猜你喜欢

转载自zcxcx1236.iteye.com/blog/1749989