为啥 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、CHARVARCHAR返回不同的长度。

但是当我运行这个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

为什么CHARVARCHAR 返回相同的长度?

【问题讨论】:

【参考方案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不是自动增长的吗,为啥他把后面超过的内容给截了。

oracle中char的效率为啥比varchar的高一些了

为啥我应该使用 char 而不是 varchar? [复制]

mysql中text是啥类型?跟varchar啥区别?为啥这个数据库中text类型后面的长度是0?

请教一下数据库字段是varchar,我们做排序的时候为啥999比1111大