研究一下关于char定长的字节问题

今天没什么事,玩点儿基础的东西

来试试char字符串数据类型的参数设置

首先看文档说明:

 说,M这个变量是字节数,那我们就来试试到底是字节还是字符

创建表:

CREATE TABLE `test` (
  `name` char(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

name字段数据类型为char(2)  

按照文档说明来看,也就是只能存储2个字节的字符串

接下来分别用汉字,数字,字母,特殊符号进行测试

mysql> insert into test(name) value('现从人');
1406 - Data too long for column 'name' at row 1

汉字:现从人,插入报错,说太长了

mysql> insert into test(name) value('154');
1406 - Data too long for column 'name' at row 1

数字:154,插入报错,说太长了

mysql> insert into test(name) value('asd');
1406 - Data too long for column 'name' at row 1

字母:asd,插入报错,说太长了

mysql> insert into test(name) value('*&^');
1406 - Data too long for column 'name' at row 1

特殊符号:插入报错,说太长了

上面四种类型都试过了,我都用的3个字符

下面用两个字符试一下

mysql> insert into test(name) value('现从');
Query OK, 1 row affected

成功了!

问题来了:一个中文汉字在当前的表里不是3个字节吗?两个汉字就是6个字节,那char(2)定长2个字节,怎么插入成功了呢?

(utf8编码一个汉字是3个字节,gbk是2个字节)

我也不知道这是为什么,很多在开发中都是很模糊的在使用,关于文档写的是字节数,不知道大家有什么看法,实测是字符数啊!

欢迎阅读作者个人博客网站:http://www.ytshoping.com

发布了45 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36431166/article/details/103858945