Skip to main content

MySQL字符数据类型基本指南

MySQL字符数据类型简介

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

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

CHAR数据类型的长度可以是0到255之间的任何值。当你存储一个CHAR值时,MySQL会根据你声明的长度用空格填充它的值。

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

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

考虑下面的例子。

首先,创建一个带有CHAR列的表。

CREATE TABLE mysql_char_test (
status CHAR(3)
);

状态列的数据类型为CHAR。它最多可以容纳3个字符。

其次,在mysqlchar测试表中插入两行。

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

第三,使用length函数获取每个CHAR值的长度。

SELECT 
status,
LENGTH(status)
FROM
mysql_char_test;

MySQL CHAR example

第四,插入带有前导和尾随空格的CHAR值。

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

最后,查询插入的值,您将看到MySQL删除了尾随空格。

SELECT 
status,
LENGTH(status)
FROM
mysql_char_test;

MySQL CHAR with leading and trailing spaces

比较MySQL字符值

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

MySQL在使用比较运算符(如=、<、>、<等)比较字符值时不考虑尾随空格。

注意,类似的操作符在使用char值进行模式匹配时会考虑尾随空间。

在上一个示例中,我们使用前导空格和尾随空格存储值Y。但是,当我们执行以下查询时:

SELECT * 
FROM mysql_char_test
WHERE status = 'Y';

MySQL返回没有行,因为它不考虑尾随空间。为了与“Y”匹配,我们需要删除尾随空格,如下所示:

SELECT *
FROM mysql_char_test
WHERE status = ' Y';

MySQL CHAR query

MySQL字符和唯一索引

如果CHAR列有一个唯一的索引,并且您在许多尾随空格中插入了一个不同于现有值的值,MySQL将拒绝更改,因为存在重复键错误。

请参见下面的示例。

首先,为mysqlchar测试表的status列创建一个唯一索引。

CREATE UNIQUE INDEX uidx_status 
ON mysql_char_test(status);

其次,在mysqlchar测试表中插入一个新行。

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

第三,插入以下值将导致重复键错误。

INSERT INTO mysql_char_test(status)
VALUES('N ');
Error Code: 1062. Duplicate entry 'N' for key 'uidx_status'

在本教程中,我们向您介绍了MySQL CHAR数据类型及其特性。现在,您应该对CHAR数据类型有了很好的理解,以便在数据库设计中应用它。