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三值逻辑与NULL
May 19 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
浅谈MySQL函数
Oct 05 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
MySQL插入数据与查询数据
Mar 25 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 MySQL
mysql数据库实现设置字段长度
Jun 10 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 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
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
python生成二维码的实例详解
2017/10/29 Python
用Python实现KNN分类算法
2017/12/22 Python
python2 与python3的print区别小结
2018/01/16 Python
Python实现k-means算法
2018/02/23 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python实现图片上添加图片
2019/11/26 Python
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
考试违纪检讨书
2014/02/02 职场文书
汇源肾宝广告词
2014/03/20 职场文书
小学生环保标语
2014/06/13 职场文书
银行自荐信范文
2015/03/25 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
物资采购管理制度
2015/08/06 职场文书
学校远程教育工作总结
2015/08/11 职场文书
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android