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主从复制及读写分离
May 07 MySQL
一篇文章弄懂MySQL查询语句的执行过程
May 07 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
MySQL如何解决幻读问题
Aug 07 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
MySQL数据库10秒内插入百万条数据的实现
Nov 01 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
Mysql 文件配置解析介绍
May 06 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 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
PHP常用编译参数中文说明
2014/09/27 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python 性能优化技巧总结
2016/11/01 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
python join方法使用详解
2019/07/30 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
python编写猜数字小游戏
2019/10/06 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
广告语设计及教案
2014/03/21 职场文书
租房合同协议书
2014/04/09 职场文书
详解Python如何批量采集京东商品数据流程
2022/01/22 Python
spring 项目实现限流方法示例
2022/07/15 Java/Android