13.5 CHAR

在本教程中,您将了解MySQL CHAR数据类型以及如何将其应用于数据库表设计。

MySQL CHAR数据类型简介

CHAR数据类型是MySQL中固定长度的字符类型。 我们经常声明CHAR类型,其长度指定要存储的最大字符数。 例如,CHAR(20)最多可以容纳20个字符。

如果要存储的数据是固定大小,则应使用CHAR数据类型。在这种情况下,与VARCHAR相比,您将获得更好的性能。

CHAR数据类型的长度可以是从0255的任何值。当存储CHAR值时,MySQL将其值与空格填充到声明的长度。

当查询CHAR值时,MySQL会删除尾部的空格。

请注意,如果启用PAD_CHAR_TO_FULL_LENGTH SQL模式,MySQL将不会删除尾随空格。

以下语句创建具有CHAR列的表。

USE testdb;

CREATE TABLE mysql_char_test (
    status CHAR(3)
);

status列使用CHAR数据类型,并有指定最多可容纳3个字符。

现在,使用以下语句向mysql_char_test表中插入2行数据。

INSERT INTO mysql_char_test(status)
VALUES('Yes'),('No');

下面我们使用length函数来获取每个CHAR值的长度。

SELECT 
    status, LENGTH(status)
FROM
    mysql_char_test;

执行上面查询语句,得到以下结果 -

+--------+----------------+
| status | LENGTH(status) |
+--------+----------------+
| Yes    |              3 |
| No     |              2 |
+--------+----------------+
2 rows in set

以下语句将插入带有前导和尾随空格的CHAR值。

INSERT INTO mysql_char_test(status)
VALUES(' Y ');

但是,当我们检索该值时,MySQL会删除尾随空格。

SELECT 
    status, LENGTH(status)
FROM
    mysql_char_test;

执行上面查询语句,得到以下结果 -

+--------+----------------+
| status | LENGTH(status) |
+--------+----------------+
| Yes    |              3 |
| No     |              2 |
|  Y     |              2 |
+--------+----------------+
3 rows in set

比较MySQL CHAR值

存储或比较CHAR值时,MySQL使用分配给列的字符集排序规则。

使用比较运算符比较CHAR值时,MySQL不会考虑尾随空格,例如:=<>><等等。

请注意,当您使用CHAR值进行模式匹配时,LIKE运算符会考虑尾随空格。

在前面的例子中,我们将值Y的前面和后面都加空格存储。 但是,当执行以下查询时:

mysql> SELECT 
    *
FROM
    mysql_char_test
WHERE
    status = 'Y';
Empty set

MySQL没有返回任何行记录,因为它不考虑尾随空格。 要与“Y”匹配,需要删除尾随空格:

SELECT 
    *
FROM
    mysql_char_test
WHERE
    status = ' Y';

执行上面查询语句,得到以下结果 -

+--------+
| status |
+--------+
|  Y     |
+--------+
1 row in set

MySQL CHAR和UNIQUE索引

如果CHAR列具有UNIQUE索引,并且插入的值有多个尾随空格不同的值,则MySQL将拒绝因重复键错误而要求您进行的更改。

请参见以下示例

首先,为mysql_char_test表的status创建唯一的索引

CREATE UNIQUE INDEX uidx_status ON mysql_char_test(status);

其次,在mysql_char_test表中插入一行

INSERT INTO mysql_char_test(status)
VALUES('N ');

Error Code: 1062. Duplicate entry 'N' for key 'uidx_status'

在本教程中,我们向您介绍了MySQL CHAR数据类型及其功能。 现在,相信您应该很好地了解CHAR数据类型,以将其应用于数据库设计。

Last updated