MySQL中VARCHAR与CHAR格式数据的区别


Posted in MySQL onMay 26, 2021

区别

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。除了可节省存储空间外,存取硬盘时也会较有效率

MySQL 相关文章推荐
Mysql服务添加 iptables防火墙策略的方案
Apr 29 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
linux下导入、导出mysql数据库命令的实现方法
May 26 MySQL
MySQL 使用索引扫描进行排序
Jun 20 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
Mysql数据库group by原理详解
Jul 07 MySQL
修改MySQL的默认密码的四种小方法
May 26 #MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 #MySQL
Mysql数据库命令大全
May 26 #MySQL
Mysql基础知识点汇总
May 26 #MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 #MySQL
linux下导入、导出mysql数据库命令的实现方法
May 26 #MySQL
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
You might like
实用函数10
2007/11/08 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
php验证码生成代码
2015/11/11 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
使用js 设置url参数
2013/07/08 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
Python中for循环详解
2014/01/17 Python
python动态加载包的方法小结
2016/04/18 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
python 日期操作类代码
2018/05/05 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
方法名是否可以与构造器的名字相同
2012/06/04 面试题
函授大专自我鉴定
2013/11/01 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
护理专业学生的求职信范文
2013/12/11 职场文书
周一问候语大全
2015/11/10 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
深入理解python协程
2021/06/15 Python
Python中rapidjson参数校验实现
2021/07/25 Python
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android