区别

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类型

最新文章

  1. LPC1768\1769之中断优先级与中断优先级组
  2. WPF中的多点触摸事件
  3. SQL技巧之分组求和
  4. Codeforces Problem 598E - Chocolate Bar
  5. js数组如何去掉逗号
  6. 黑马程序员—— Java SE(2)
  7. Protel99se教程五:protel99se的自动布线
  8. 基于android 社会的app短信分享 发送回调事件的实现
  9. elasticsearch简介
  10. cyclictest 简介
  11. js 30Dom应用
  12. 【Linux】-- 在linux上安装mysql及基本操作
  13. innodb 关键特性(insert buffer)
  14. 【HNOI2016】大数
  15. [NIO-3]Socket通道
  16. jupyter notebook不能选择虚拟环境的解决方法
  17. U9财务体系
  18. Connections in Galaxy War (逆向并查集)题解
  19. python字符串 分片索引
  20. 在 Mac 上通过 Docker 运行 Asp.net Core 简易教程

热门文章

  1. Android框架之AndroidAnnotations实战
  2. Daily Scrum 12.14
  3. CR LF的由来
  4. css 3 动画
  5. JS各种算法小例子
  6. yaf框架学习笔记
  7. SQLServer : 几个特殊函数(RAND,CHECKSUM, NEWID)
  8. 通过反射获取父类泛型的Class对象 ParameterizedType
  9. 【Thinking in Java】Java Callable的使用
  10. [UCSD白板题 ]Small Fibonacci Number