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 8.0.24 安装配置方法图文教程
May 12 MySQL
MySQL如何构建数据表索引
May 13 MySQL
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
MySQL约束超详解
Sep 04 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 MySQL
一次MySQL启动导致的事故实战记录
Sep 15 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
详细介绍MySQL中limit和offset的用法
May 06 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 MySQL
delete in子查询不走索引问题分析
Jul 07 MySQL
MySQL索引失效场景及解决方案
Jul 23 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
js实现一个简易计算器
2020/03/30 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
python读取html中指定元素生成excle文件示例
2014/04/03 Python
通过C++学习Python
2015/01/20 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
自我评价200字分享
2013/12/17 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
党支部工作总结2015
2015/04/01 职场文书
产品调价通知函
2015/04/20 职场文书
2015中秋祝酒词
2015/08/12 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL