为啥 CHAR 和 VARCHAR 在 MySQL 中返回相同的长度?
Posted
技术标签:
【中文标题】为啥 CHAR 和 VARCHAR 在 MySQL 中返回相同的长度?【英文标题】:Why CHAR and VARCHAR return the same length in MySQL?为什么 CHAR 和 VARCHAR 在 MySQL 中返回相同的长度? 【发布时间】:2021-02-22 01:07:35 【问题描述】:根据这个answer、CHAR
和VARCHAR
返回不同的长度。
但是当我运行这个code:
CREATE TABLE EMPLOYEE
( ID INT,
Var_Name VARCHAR(5) NOT NULL,
Char_Name CHAR(5) NOT NULL,
Age INT,
Dnumber INT,
Level INT,
PRIMARY KEY (ID)
);
INSERT INTO EMPLOYEE (ID, Var_Name, Char_Name, Age, Dnumber, Level) VALUES(1,'Tom', 'Tom', 21, 2, 5);
INSERT INTO EMPLOYEE (ID, Var_Name, Char_Name, Age, Dnumber, Level) VALUES(2,'Lucky', 'Lucky', 22, 2, 3);
INSERT INTO EMPLOYEE (ID, Var_Name, Char_Name, Age, Dnumber, Level) VALUES(3,'Blue', 'Blue', 20, 2, 3);
SELECT Var_Name, LENGTH(Var_Name), LENGTH(Char_Name) FROM EMPLOYEE
输出:
Var_Name LENGTH(Var_Name) LENGTH(Char_Name)
Tom 3 3
Lucky 5 5
Blue 4 4
我认为输出应该是这样的:
Var_Name LENGTH(Var_Name) LENGTH(Char_Name)
Tom 3 5
Lucky 5 5
Blue 4 5
为什么CHAR
和VARCHAR
返回相同的长度?
【问题讨论】:
【参考方案1】:mysql 8.0 Reference Manual / ... / The CHAR and VARCHAR Types
CHAR 列的长度固定为您在创建表时声明的长度。长度可以是 0 到 255 之间的任何值。存储 CHAR 值时,它们会用空格右填充到指定长度。 检索 CHAR 值时,除非启用 PAD_CHAR_TO_FULL_LENGTH SQL 模式,否则将删除尾随空格。
fiddle
【讨论】:
以上是关于为啥 CHAR 和 VARCHAR 在 MySQL 中返回相同的长度?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我应该为 MySQL 中的 varchar 选择 255 以外的任何其他长度?
mysql中 varchar(20)我的数据长度超过了,varchar不是自动增长的吗,为啥他把后面超过的内容给截了。
为啥我应该使用 char 而不是 varchar? [复制]