字串資料類型為 CHAR
、VARCHAR
、BINARY
、VARBINARY
、BLOB
、TEXT
、ENUM
和 SET
。
在某些情況下,MySQL 可能會將字串欄位變更為與 CREATE TABLE
或 ALTER TABLE
陳述式中給定的類型不同的類型。請參閱 第 15.1.20.7 節,「無聲欄位規格變更」。
對於字元字串欄位(CHAR
、VARCHAR
和 TEXT
類型)的定義,MySQL 會以字元單位解譯長度規格。對於二進位字串欄位(BINARY
、VARBINARY
和 BLOB
類型)的定義,MySQL 會以位元組單位解譯長度規格。
字元字串資料類型(CHAR
、VARCHAR
、TEXT
類型、ENUM
、SET
,以及任何同義字)的欄位定義可以指定欄位字元集和校對
CHARACTER SET
指定字元集。如果需要,可以使用COLLATE
屬性指定字元集的校對,以及任何其他屬性。例如CREATE TABLE t ( c1 VARCHAR(20) CHARACTER SET utf8mb4, c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs );
此資料表定義會建立一個名為
c1
的欄位,其字元集為utf8mb4
,並使用該字元集的預設校對;以及一個名為c2
的欄位,其字元集為latin1
,並使用區分大小寫 (_cs
) 的校對。當缺少
CHARACTER SET
和COLLATE
屬性中的一個或兩個時,指定字元集和校對的規則說明於 第 12.3.5 節,「欄位字元集和校對」。CHARSET
是CHARACTER SET
的同義字。為字元字串資料類型指定
CHARACTER SET binary
屬性會導致欄位建立為對應的二進位字串資料類型:CHAR
變成BINARY
、VARCHAR
變成VARBINARY
,且TEXT
變成BLOB
。對於ENUM
和SET
資料類型,不會發生這種情況;它們會依宣告的方式建立。假設您使用此定義指定一個資料表CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET binary, c2 TEXT CHARACTER SET binary, c3 ENUM('a','b','c') CHARACTER SET binary );
產生的資料表具有此定義
CREATE TABLE t ( c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary );
BINARY
屬性是非標準的 MySQL 擴充功能,它是指定欄位字元集(或未指定欄位字元集時,資料表預設字元集)的二進位 (_bin
) 校對的簡寫。在這種情況下,比較和排序會以數值字元碼值為基礎。假設您使用此定義指定一個資料表CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 BINARY, c2 TEXT BINARY ) CHARACTER SET utf8mb4;
產生的資料表具有此定義
CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin, c2 TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ) CHARACTER SET utf8mb4;
在 MySQL 9.0 中,
BINARY
屬性已過時,而且您應該預期在未來的 MySQL 版本中會移除對它的支援。應用程式應調整為改用明確的_bin
校對。使用
BINARY
來指定資料類型或字元集的方式保持不變。ASCII
屬性是CHARACTER SET latin1
的簡寫。舊版 MySQL 版本支援ASCII
,但ASCII
已過時;請改用CHARACTER SET
。UNICODE
屬性是CHARACTER SET ucs2
的簡寫。在較舊的 MySQL 版本中支援,UNICODE
已被棄用;請改用CHARACTER SET
。
字元欄位的比較和排序是基於指派給該欄位的校對 (collation)。對於 CHAR
、VARCHAR
、TEXT
、ENUM
和 SET
資料類型,您可以宣告一個具有二進位 (_bin
) 校對或 BINARY
屬性的欄位,以使比較和排序使用底層的字元碼值,而不是詞彙順序。
有關在 MySQL 中使用字元集的更多資訊,請參閱 第 12 章,字元集、校對、Unicode。
[NATIONAL] CHAR[(
M
)] [CHARACTER SETcharset_name
] [COLLATEcollation_name
]一個固定長度的字串,在儲存時始終以空格向右填充到指定的長度。
M
代表欄位的字元長度。M
的範圍是 0 到 255。如果省略M
,則長度為 1。注意除非啟用
PAD_CHAR_TO_FULL_LENGTH
SQL 模式,否則在檢索CHAR
值時,將會移除尾隨空格。CHAR
是CHARACTER
的簡寫。NATIONAL CHAR
(或其等效的簡短形式,NCHAR
)是標準 SQL 中定義CHAR
欄位應使用某些預定義字元集的方法。MySQL 使用utf8mb3
作為此預定義的字元集。請參閱第 12.3.7 節,「國家字元集」。CHAR BYTE
資料類型是BINARY
資料類型的別名。這是一個相容性功能。MySQL 允許您建立
CHAR(0)
類型的欄位。當您必須與依賴欄位存在但實際上不使用其值的舊應用程式相容時,這非常有用。當您需要一個只能取兩個值的欄位時,CHAR(0)
也相當不錯:定義為CHAR(0) NULL
的欄位只佔用一位元,並且只能取值NULL
和''
(空字串)。[NATIONAL] VARCHAR(
M
) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]一個可變長度的字串。
M
代表欄位的最大字元長度。M
的範圍是 0 到 65,535。VARCHAR
的有效最大長度受限於最大列大小 (65,535 位元組,在所有欄位之間共享) 和所使用的字元集。例如,utf8mb3
字元每個字元最多可能需要三個位元組,因此使用utf8mb3
字元集的VARCHAR
欄位可以宣告為最大 21,844 個字元。請參閱第 10.4.7 節,「資料表欄位計數和列大小的限制」。MySQL 將
VARCHAR
值儲存為 1 位元組或 2 位元組的長度前綴加上資料。長度前綴指示值中的位元組數。如果值不需要超過 255 個位元組,則VARCHAR
欄位使用一個長度位元組;如果值可能需要超過 255 個位元組,則使用兩個長度位元組。注意MySQL 遵循標準 SQL 規範,並且 不會 從
VARCHAR
值中移除尾隨空格。VARCHAR
是CHARACTER VARYING
的簡寫。NATIONAL VARCHAR
是標準 SQL 中定義VARCHAR
欄位應使用某些預定義字元集的方法。MySQL 使用utf8mb3
作為此預定義的字元集。請參閱第 12.3.7 節,「國家字元集」。NVARCHAR
是NATIONAL VARCHAR
的簡寫。BINARY
類型與CHAR
類型類似,但儲存的是二進位位元組字串,而不是非二進位字元字串。可選長度M
代表欄位的位元組長度。如果省略,M
預設為 1。VARBINARY
類型與VARCHAR
類型類似,但儲存的是二進位位元組字串,而不是非二進位字元字串。M
代表欄位的最大位元組長度。最大長度為 255 (28 − 1) 位元組的
BLOB
欄位。每個TINYBLOB
值都使用 1 位元組長度前綴來儲存,該前綴指示值中的位元組數。TINYTEXT [CHARACTER SET
charset_name
] [COLLATEcollation_name
]最大長度為 255 (28 − 1) 個字元的
TEXT
欄位。如果該值包含多位元組字元,則有效最大長度會較小。每個TINYTEXT
值都使用 1 位元組長度前綴來儲存,該前綴指示值中的位元組數。最大長度為 65,535 (216 − 1) 位元組的
BLOB
欄位。每個BLOB
值都使用 2 位元組長度前綴來儲存,該前綴指示值中的位元組數。可以為此類型指定可選長度
M
。如果這樣做,MySQL 會建立一個足夠大的最小BLOB
類型欄位,以容納長度為M
個位元組的值。TEXT[(
M
)] [CHARACTER SETcharset_name
] [COLLATEcollation_name
]最大長度為 65,535 (216 − 1) 個字元的
TEXT
欄位。如果該值包含多位元組字元,則有效最大長度會較小。每個TEXT
值都使用 2 位元組長度前綴來儲存,該前綴指示值中的位元組數。可以為此類型指定可選長度
M
。如果這樣做,MySQL 會建立一個足夠大的最小TEXT
類型欄位,以容納長度為M
個字元的值。最大長度為 16,777,215 (224 − 1) 位元組的
BLOB
欄位。每個MEDIUMBLOB
值都使用 3 位元組長度前綴來儲存,該前綴指示值中的位元組數。MEDIUMTEXT [CHARACTER SET
charset_name
] [COLLATEcollation_name
]最大長度為 16,777,215 (224 − 1) 個字元的
TEXT
欄位。如果該值包含多位元組字元,則有效最大長度會較小。每個MEDIUMTEXT
值都使用 3 位元組長度前綴來儲存,該前綴指示值中的位元組數。一個
BLOB
欄位的最大長度為 4,294,967,295 或 4GB (232 − 1) 位元組。LONGBLOB
欄位的有效最大長度取決於客戶端/伺服器協定中設定的最大封包大小以及可用的記憶體。每個LONGBLOB
值都使用 4 位元組長度前綴來儲存,該前綴指示該值中的位元組數。LONGTEXT [CHARACTER SET
charset_name
] [COLLATEcollation_name
]一個
TEXT
欄位的最大長度為 4,294,967,295 或 4GB (232 − 1) 個字元。如果該值包含多位元組字元,則有效最大長度會較小。LONGTEXT
欄位的有效最大長度也取決於客戶端/伺服器協定中設定的最大封包大小以及可用的記憶體。每個LONGTEXT
值都使用 4 位元組長度前綴來儲存,該前綴指示該值中的位元組數。ENUM('
value1
','value2
',...) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]一個列舉。一個字串物件,只能有一個值,該值從值列表
'
、value1
''
、value2
'...
、NULL
或特殊的''
錯誤值中選取。ENUM
值在內部以整數表示。一個
ENUM
欄位最多可以有 65,535 個不同的元素。單個
ENUM
元素支援的最大長度為M
<= 255 且 (M
xw
) <= 1020,其中M
是元素文字長度,而w
是字元集中最大長度字元所需的位元組數。SET('
value1
','value2
',...) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]一個集合。一個字串物件,可以有零個或多個值,每個值都必須從值列表
'
、value1
''
、value2
'...
中選取。SET
值在內部以整數表示。一個
SET
欄位最多可以有 64 個不同的成員。單個
SET
元素支援的最大長度為M
<= 255 且 (M
xw
) <= 1020,其中M
是元素文字長度,而w
是字元集中最大長度字元所需的位元組數。