我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持
创建测试表
MySQL版本:8.0
数据库名称: test
数据库引擎: InnoDB
字符集:utf8mb4_0900_ai_ci
字段:
字段名称 | 字段类型 |
---|---|
test_char | char(1) |
test_varchar | varchar(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字节。
我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持
插入失败记录截图
我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持