公司主页和公司网站,潍坊网站制作多少钱,建设事业单位网站多少钱,wordpress 链接插件证明char是定长的#xff1f;
大部分博客都在讲解char和varchar区别的时候都谈到char为定长#xff0c;varchar为变长。
但是怎么证明char为定长呢#xff1f;
下面是我证明的过程。 创建CHAR列#xff1a;首先#xff0c;创建一个CHAR列#xff0c;指定其长度。例如
大部分博客都在讲解char和varchar区别的时候都谈到char为定长varchar为变长。
但是怎么证明char为定长呢
下面是我证明的过程。 创建CHAR列首先创建一个CHAR列指定其长度。例如 CREATE TABLE char_test (id INT,name CHAR(10)
);在上面的示例中name列被定义为CHAR(10)表示它将始终占用10个字符的空间。 插入不同长度的数据接下来插入不同长度的数据并检查存储占用的空间。例如 INSERT INTO char_test (id, name) VALUES (1, John);
INSERT INTO char_test (id, name) VALUES (2, Alice);查看存储空间使用以下SQL语句来查看存储空间的使用情况 SELECT id, name, LENGTH(name) AS actual_length FROM char_test;上述查询将返回 -----------------------------
| id | name | actual_length |
-----------------------------
| 1 | John | 4 |
| 2 | Alice | 5 |
-----------------------------证明翻车
为什么呢为什么查询出来的长度不是10呢
有点出乎笔者的意料。
这个时候我想到的是chatgpt。 我差点就相信它了但是我问它出处的时候它又“人工智障”了。 这个时候我想到了MySQL官网找寻答案。
下面链接有详细char的介绍。
MySQL :: MySQL 8.0 Reference Manual :: 11.3.2 The CHAR and VARCHAR Types 重点来了。。。
当char的值在检索查询的时候右边的填充空格被移除了。
那怎么办呢后面不是给了一个SQL mode吗修改SQL mode干一把。
mysql select sql_mode;
--------------------------------------------
| sql_mode |
--------------------------------------------
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
--------------------------------------------
1 row in set (0.00 sec)设置PAD_CHAR_TO_FULL_LENGTH模式。
mysql SET sql_mode PAD_CHAR_TO_FULL_LENGTH;
Query OK, 0 rows affected, 1 warning (0.00 sec)在查询char类型字段的长度。
mysql SELECT id, name, CHAR_LENGTH(name) AS character_length, LENGTH(name) AS byte_length FROM char_test;
-------------------------------------------------
| id | name | character_length | byte_length |
-------------------------------------------------
| 1 | John | 10 | 10 |
| 2 | Alice | 10 | 10 |
-------------------------------------------------
2 rows in set (0.00 sec)至此终于是把char为定长证明出来了。
最后得出结论 CHAR确实是定长的。 CHAR 在存储时会在右边填充空格以达到指定的长度检索查询时会去掉空格。在PAD_CHAR_TO_FULL_LENGTH模式下会显示出空格。