千家信息网

Mysql中varchar与char的区别有哪些

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关Mysql中varchar与char的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysql中varchar与char的区别以及var
千家信息网最后更新 2026年10月31日Mysql中varchar与char的区别有哪些

这篇文章给大家分享的是有关Mysql中varchar与char的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

mysql中varchar与char的区别以及varchar(30)中的30代表的涵义

(1)varchar与char的区别

varchar存储可变长字符串,小于255字节时需要1个额外字节(大于255需要2个额外字节)存储长度,最大长度为65532字节(所有列总和);

char存储定长(right padding),读取时会截断末尾空格,长度最大为255字符;

char 与varchar都是用来存储字符串的,只是他们的保存方式不一样,char有固定的长度,而varchar属于可变长的字符类型。

char是一种固定长度的类型,varchar则是一种可变长度的类型。

char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足。(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

建议:

myisam存储引擎建议使用固定长度,数据列代替可变长度的数据列。

memory存储引擎目前都使用固定数据行存储,因此无论使用char,varchar列都没有关系。

Innodb存储引擎建议使用varchar类型。

在MySQL中用来判断是否需要进行对数据列类型转换的规则:

1. 在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的。

2. 只要数据表里有一个数据列的长度是可变的,那么各数据行的长度都是可变的。

3. 如果某个数据表里的数据行的长度是可变的,那么为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型。

对于MyISAM表,尽量使用char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间;

对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个表头部分存放着指向各个有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利。

(2)varchar(30)中30的涵义

最大存储30个字符;varchar(5)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col 采用fixed_length计算col长度(memory)引擎一样。

For example, a varchar(255) column can hold a string with a maximum length of 255 characters(字符而非字节),对于latin1, 'abcd'的L为4,存储需要5个字节;对于ucs2(双字节字符),则需要10个字节存储(最大长度为510>255,故需要额外2个字节)

(3)int(20)中20的涵义

20表示最大显示宽度为20,但仍占4个字节存储,存储范围不变;

create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a));

create table int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));

select * from int_test;
+------------+
| a |
+------------+
| 0000000001 |
| 0000000002 |
| 0000000003 |
| 2147483648 |
+------------+

select * from int_test_4;
+------------+
| a |
+------------+
| 0001 |
| 0002 |
| 0003 |
| 2147483648 |
+------------+

(4)为什么MySQL这样设计?

对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)和int(20)存储和结算均一样。

感谢各位的阅读!关于"Mysql中varchar与char的区别有哪些"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

数据 长度 存储 字节 类型 字符 可变 最大 数据表 空间 引擎 更多 建议 涵义 空格 内容 只是 字符串 磁盘 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技 科技互联网企业 狮子座互联网科技 互联网科技媒体 联恩商钥互联网科技有限公司 海南科技产业互联网平台 上海宁丞科技互联网 武汉健翔互联网络科技有限公司 互联网科技公司有风险吗 佛山市拉法互联网科技有限公司 上海京穆互联网科技有限公司 江苏苏星互联网科技有限公司 广州千川互联网科技有限公司 互联网科技包装股份有限公司上市 济南小医互联网科技有限公司招聘 互联网时代科技型公司的机会 互联网科技新闻 六子台科技互联网展会 每日互联网科技新闻 武汉亿视互联网科技有限公司 湖北九亚互联网络科技有限公司 新华互联网科技学院 美国互联网科技 科技互联网公司logo 新浪科技互联网 互联网系的金融科技公司 南博望互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 江苏互联网智能科技产品出厂价 现代互联网科技公司
0