MySQL CHAR Data Type

摘要:在本教程中,您将了解 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)
);Code language: SQL (Structured Query Language) (sql)

status列的数据类型是CHAR 。它最多可以容纳 3 个字符。

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

INSERT INTO mysql_char_test(status)
VALUES('Yes'),('No');Code language: SQL (Structured Query Language) (sql)

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

SELECT 
    status, 
    LENGTH(status)
FROM
    mysql_char_test;Code language: SQL (Structured Query Language) (sql)
MySQL CHAR 示例

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

INSERT INTO mysql_char_test(status)
VALUES(' Y ');Code language: SQL (Structured Query Language) (sql)

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

SELECT 
    status, 
    LENGTH(status)
FROM
    mysql_char_test;Code language: SQL (Structured Query Language) (sql)
MySQL CHAR 带有前导和尾随空格

比较 MySQL CHAR

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

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

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

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

SELECT * 
FROM mysql_char_test
WHERE status = 'Y';Code language: SQL (Structured Query Language) (sql)

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

SELECT *
FROM mysql_char_test
WHERE status = ' Y';Code language: SQL (Structured Query Language) (sql)
MySQL CHAR 查询

MySQL CHARUNIQUE索引

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

请参阅以下示例。

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

CREATE UNIQUE INDEX uidx_status 
ON mysql_char_test(status);Code language: SQL (Structured Query Language) (sql)

其次,将新行插入mysql_char_test表中。

INSERT INTO mysql_char_test(status)
VALUES('N');Code language: SQL (Structured Query Language) (sql)

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

INSERT INTO mysql_char_test(status)
VALUES('N ');Code language: SQL (Structured Query Language) (sql)
Error Code: 1062. Duplicate entry 'N' for key 'uidx_status'Code language: JavaScript (javascript)

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

本教程有帮助吗?