MySQL char型別

2019-10-16 22:58:31

在本教學中,您將了解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資料型別,以將其應用於資料庫設計。