mysql(5.1)中char与varchar的区别分析

CHAR和VARCHAR类型相似,但它们保存和检索的方式不一样。它们的最大长度和是否尾部空格被保留等方面也不一样。在存储或检索过程当中不进行大小写转换。.net

CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)能够占用30个字符。code

CHAR列的长度固定为建立表时声明的长度。长度能够为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程当中不进行大小写转换。字符串

VARCHAR列中的值为可变长字符串。长度能够指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集肯定。总体最大长度是65,532字节)。get

同CHAR对比,VARCHAR值保存时只保存须要的字符数,另加一个字节来记录长度(若是列声明的长度超过255,则使用两个字节)。it

VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。im

若是分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。若是被裁掉的字符不是空格,则会产生一条警告。若是裁剪非空格字符,则会形成错误(而不是警告)并经过使用严格SQL模式禁用值的插入。static

下面的表显示了将各类字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差异:top

image

请注意上表中最后一行的值只适用不使用严格模式时;若是MySQL运行在严格模式,超过列长度不的值保存,而且会出现错误。img

从CHAR(4)和VARCHAR(4)列检索的值并不老是相同,由于检索时从CHAR列删除了尾部的空格。经过下面的例子说明该差异:di

image
在MySQL中的全部CHAR和VARCHAR值比较时不须要考虑任何尾部空格
相关文章
相关标签/搜索