MySQL CHAR 数据类型介绍
在本文中,我们将带您了解 MySQL 中的 CHAR
数据类型。
在 MySQL 中, CHAR
是固定长度的字符串类型,这与 VARCHAR
数据类型有所不同。当一个列的类型定义为 CHAR
类型后,列中的内容的长度就是字段定义的长度(字符数)。
MySQL CHAR 语法
当我们使用 CHAR
数据类型时,我们需要指定一个长度。其语法如下:
CHAR(length)
这里:
length
是一个数值,它指示了此列的字符数。length
可以是0
到255
之间的任何值。- 如果我们不指定此值,则默认值是
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
需要指定一个长度。它可以是0
和255
之间的任何值。如果不指定长度,则默认为1
。- 对于
CHAR
类型的值,MySQL 会忽略尾部的空格。读取CHAR
列的值时,MySQL 会自动删除尾部的空格。