在本教學中,您將瞭解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
列的表。
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
數據類型,以將其應用於資料庫設計。