【MySQL实践】不同字符类型,占用 char(1) 和 varchar(1) 空间实验

文章详细描述了在MySQL8.0InnoDB数据库中,使用char和varchar不同类型存储单字符和多字符时的测试结果,以及字符集对存储空间的影响。作者通过实例展示了字符长度与字节之间的关系,并分享了实践中的注意事项。
摘要由CSDN通过智能技术生成

我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持


创建测试表

MySQL版本:8.0
数据库名称: test
数据库引擎: InnoDB
字符集:utf8mb4_0900_ai_ci

字段:

字段名称字段类型
test_charchar(1)
test_varcharvarchar(1)

执行测试SQL

  • char 类型字段,插入10条测试记录。
  • 成功 5 条,失败 5 条。
# char(1)
insert into test(test_char) values('张'); # 成功
insert into test(test_char) values('张三'); # 失败
insert into test(test_char) values('a'); # 成功
insert into test(test_char) values('ab'); # 失败
insert into test(test_char) values('1'); # 成功
insert into test(test_char) values('12'); # 失败
insert into test(test_char) values(','); # 成功
insert into test(test_char) values(',,'); # 失败
insert into test(test_char) values(','); # 成功
insert into test(test_char) values(',,'); # 失败
  • varchar 类型字段,插入10条测试记录。
  • 成功 5 条,失败 5 条。
# varchar(1)
insert into test(test_varchar) values('张'); # 成功
insert into test(test_varchar) values('张三'); # 失败
insert into test(test_varchar) values('a'); # 成功
insert into test(test_varchar) values('ab'); # 失败
insert into test(test_varchar) values('1'); # 成功
insert into test(test_varchar) values('12'); # 失败
insert into test(test_varchar) values(','); # 成功
insert into test(test_varchar) values(',,'); # 失败
insert into test(test_varchar) values(','); # 成功
insert into test(test_varchar) values(',,'); # 失败

查询表中结果:

在这里插入图片描述


实践总结

  • 1 个单位的 char / varchar 类型存储空间,只能存储一个字符。
    • 这一个字符,不限定存储的字符类型,即:不限是数字、中文、英文、中文字符、英文字符,只要是一个,就占一个单位。
  • varchar 类型虽然是用于存储可变长度的字符串的数据类型,但是也受设置的最大限制长度约束。

拓展:计算机存储单位进制

1TB(太字节) = 1024GB(吉字节)
1GB(吉字节) = 1024MB(兆字节)
1MB(兆字节) = 1024KB(千字节)
1KB(千字节) = 1024B(字节)
1B(字节,byte,简写:B) = 8b(位,bit,简写:b)

位(bit,简写:b):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。
字节(Byte,简写:B):计算机中数据的基本单位,每8位组成一个字节。

我们MySQL这里的1个字符 ( 1 character,表现为char(1)或varchar(1)),具体转换为多少字节,受使用的不同 字符集 影响。

latin1 :5单字符最大占 1个字节。
gbk :单字符最大可占用 2个字节。
utf8 :单字符最大可占用 3个字节。
ut8mb4:单字符最大占 4个字节。

所以我们这里1字符最大占4字节。


我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持


插入失败记录截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我梦Leo

谢谢无敌帅气可爱迷人的你哦 ~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值