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 14 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
浅析MySQL如何实现事务隔离
Jun 26 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
Mysql Innodb存储引擎之索引与算法
Feb 15 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
MySQL读取JSON转换的方式
Mar 18 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
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
php实现读取超大文件的方法
2014/07/28 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
javascript常用的方法分享
2015/07/01 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
python 数据类型强制转换的总结
2021/01/25 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
实习单位推荐信范文
2013/11/27 职场文书
学校十一活动方案
2014/02/01 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
MySQL学习必备条件查询数据
2022/03/25 MySQL
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers