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;
第四,插入带有前导和尾随空格的CHAR值。
INSERT INTO mysql_char_test(status)
VALUES(' Y ');
最后,查询插入的值,您将看到MySQL删除了尾随空格。
SELECT
status,
LENGTH(status)
FROM
mysql_char_test;
比较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列有一个唯一的索引,并且您在许多尾随空格中插入了一个不同于现有值的值,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数据类型有了很好的理解,以便在数据库设计中应用它。