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