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锁机制
Apr 05 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
Mysql基础知识点汇总
May 26 MySQL
安装配置mysql及Navicat prenium的详细流程
Jun 10 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
Mar 22 MySQL
mysql序号rownum行号实现方式
Dec 24 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
smarty模板中拼接字符串的方法
2014/02/14 PHP
php获取url参数方法总结
2014/11/13 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
python去除所有html标签的方法
2015/05/05 Python
深入理解Python中的内置常量
2017/05/20 Python
python监控进程脚本
2018/04/12 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
护理中职生求职信范文
2014/02/24 职场文书
水电站项目建议书
2014/05/12 职场文书
幼儿教师求职信
2014/05/24 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
女生抽烟检讨书
2014/10/05 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
Django中celery的使用项目实例
2022/07/07 Python