MySQL CHAR 数据类型介绍

在本文中,我们将带您了解 MySQL 中的 CHAR 数据类型。

在 MySQL 中, CHAR 是固定长度的字符串类型,这与 VARCHAR 数据类型有所不同。当一个列的类型定义为 CHAR 类型后,列中的内容的长度就是字段定义的长度(字符数)。

MySQL CHAR 语法

当我们使用 CHAR 数据类型时,我们需要指定一个长度。其语法如下:

CHAR(length)

这里:

  • length 是一个数值,它指示了此列的字符数。
  • length 可以是 0255 之间的任何值。
  • 如果我们不指定此值,则默认值是 1。也就是说 CHAR 等同于 CHAR(1)

如果您写入 CHAR 列中的字符串的长度小于指定的字符长度,MySQL 会在源字符串后填充空格一直到指定的长度。当您读取 CHAR 列中的值时,MySQL 会删除后面的空格。

由于 CHAR 数据类型采用固定的长度进行存储,因此 CHAR 的性能要比 VARCHAR 更好。

MySQL CHAR 实例

让我们通过一下语句创建一个表 test_char 作为演示表:

CREATE TABLE test_char (name char(5) NOT NULL);

插入数据到 CHAR 列

现在,让我们通过以下 SQL 语句插入两行数据test_char 表中:

INSERT INTO test_char VALUES ('Harve'), ('Tim');

然后我们查询一下 test_char 表的数据:

SELECT name, LENGTH(name)
FROM test_char;
+-------+--------------+
| name  | LENGTH(name) |
+-------+--------------+
| Harve |            5 |
| Tim   |            3 |
+-------+--------------+

这里 Tim 的长度为 3, 因为当读取 CHAR 列中的值时, MySQL 会自动删除了后面的空格。

后缀空格问题

现在,让我们插入一个前后带空格的值 ' Tom ' 到列中:

INSERT INTO test_char VALUES(' Tom ');

让我们再看一下结果:

+-------+--------------+
| name  | LENGTH(name) |
+-------+--------------+
| Harve |            5 |
| Tim   |            3 |
|  Tom  |            4 |
+-------+--------------+

这里,' Tom ' 变成了 ' Tom'。这是因为 MySQL 会删除 CHAR 值的后面的空格,不论这个空格是否是原来的。

也就是说 MySQL 会忽略字符串尾部的空格。比如 'Tom' 是等同于 'Tom ' 或者 'Tom ' 的。

当一个 CHAR 列为唯一列时,这可能会带来问题。

插入超过长度的值

让我们插入一个超过指定长度的 CHAR 值:

INSERT INTO test_char VALUES('Steven');

MySQL 不会自动截断字符串,它将会返回如下的错误:

ERROR 1406 (22001): Data too long for column 'name' at row 1

结论

在本文中,我们讨论了 MySQL CHAR 数据类型以及 MySQL 对 CHAR 数据类型的处理方式:

  • CHAR 数据是按照固定长度存储,因此比 VARCHAR 效率高。
  • CHAR 需要指定一个长度。它可以是 0255 之间的任何值。如果不指定长度,则默认为 1
  • 对于 CHAR 类型的值,MySQL 会忽略尾部的空格。读取 CHAR 列的值时,MySQL 会自动删除尾部的空格。