MySQL CHAR数据类型

时间:2019-11-20 08:52:10  来源:igfitidea点击:

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

MySQL CHAR数据类型简介

CHAR数据类型是MySQL中的固定长度字符类型。
您通常用长度指定要存储的最大字符数的CHAR类型来声明。
例如,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个字符。

其次,在mysql_char_test表中插入两行。

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 ');

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

SELECT 
    status, 
    LENGTH(status)
FROM
    mysql_char_test;

比较MySQL CHAR值

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

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

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

在前面的示例中,我们将值Y与前导空格和尾随空格一起存储。
但是,当我们执行以下查询时:

SELECT * 
FROM mysql_char_test
WHERE status = 'Y';

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

SELECT *
FROM mysql_char_test
WHERE status = ' Y';

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');

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

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

在本教程中,我们向您介绍了MySQL CHAR数据类型及其功能。
现在,您应该对CHAR数据类型有了充分的了解,可以将其应用于数据库设计中。