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