MySQL中VARCHAR与CHAR格式数据的区别
区别
char与varchar类型类似,但它们保存和检索的方式不同。char有固定的长度,而varchar属于可变长的字符类型。它们最大长度和是否尾部空格被保留等方面也不同。在存储和检索过程中不进行大小写转换。
下面的表格显示了将各种字符串值保存到char(4)和varchar(4)列后的结果,说明了char和varchar之间的差别:
值 char(4) 存储需求 varchar(4) 存储需求
'' ' ' 4个字节 '' 1个字节
'ab' 'ab ' 4个字节 'ab' 3个字节
'abcd' 'abcd' 4个字节 'abcd' 5个字节
'abcdefgh' 'abcd' 4个字节 'abcd' 5个字节
从上面可以看得出来char的长度是固定的,不管你存储的数据是多少他都会都固定的长度。而varchar则处可变长度但他要在总长度上加1字节,这个用来存储字符长度(如果声明的长度超过255,则使用2个字节)。所以实际应用中用户可以根据自己的数据类型来做。
请注意,上表中最后一行的值只适用不使用严格模式时;如果mysql运行在严格模式,超过列长度的值不被保存,并且会出现错误。
从char(4)和varchar(4)列检索的值并不总是相同,因为检索时从char列删除了尾部的空格。通过下面的例子说明差别:
mysql> create table test(a varchar(4), b char(4)); mysql> insert into test values ('ab ', 'ab '); mysql> select concat(a, '+'), concat(b, '+') from test;
结果如下:
concat(a, '+') concat(b, '+') ab + ab+
从上面可以看出来,由于某种原因char有固定长度,所以在处理速度上要比varchar快很多,但是相对浪费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实现。
建议
myisam存储引擎 建议使用固定长度,数据列代替可变长度的数据列
innodb 存储引擎 建议使用varchar类型
总结分析:
文字字段若长度固定,如:身分证号码,就不要用 varchar 或 nvarchar,应该用 char 或 nchar。
支持多语言的站点应考虑使用 unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题
文字字段若长度不固定,如:地址,则该用 varchar 或 nvarchar。除了可节省存储空间外,存取硬盘时也会较有效率
上一篇: Python进阶-函数默认参数(详解)
推荐阅读
-
Android App中读取XML与JSON格式数据的基本方法示例
-
MySQL中VARCHAR与CHAR格式数据的区别
-
MySQL中create table as 与like的区别分析
-
mysql中order by与group by的区别
-
解析mysql中max_connections与max_user_connections的区别
-
MySQL中create table as 与like的区别分析
-
sql中varchar和nvarchar的区别与使用方法
-
Mysql数据库中把varchar类型转化为int类型的方法
-
MySQL数据库中把int转化varchar引发的慢查询
-
Mysql中的count()与sum()区别详细介绍