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的join buffer原理
Apr 29 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 MySQL
MySQL实现字段分割一行转多行的示例代码
Jul 07 MySQL
Mysql如何查看是否使用到索引
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
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
修改发贴的编辑功能
2007/03/07 Javascript
利用404错误页面实现UrlRewrite的实现代码
2008/08/20 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
30年同学聚会感言
2014/01/30 职场文书
大专生自荐书范文
2014/06/22 职场文书
最美护士演讲稿
2014/08/27 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
考研导师推荐信范文
2015/03/27 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技