字串資料類型為 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 8.4 中,
BINARY
屬性已被棄用,您應該預期 MySQL 的未來版本會移除對它的支援。應用程式應調整為改用明確的_bin
校對。使用
BINARY
來指定資料類型或字元集的方式保持不變。ASCII
屬性是CHARACTER SET latin1
的簡寫。在舊版的 MySQL 中受支援,ASCII
已被棄用;請改用CHARACTER SET
。UNICODE
屬性是CHARACTER SET ucs2
的簡寫。在舊版的 MySQL 中受支援,UNICODE
已被棄用;請改用CHARACTER SET
。
字元欄位的比較和排序是基於指派給該欄位的定序。對於 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 位元組的長度前綴加上資料。長度前綴指示值的位元組數。VARCHAR
欄位如果值不需要超過 255 位元組,則使用一個長度位元組;如果值可能需要超過 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 位元組長度前綴儲存,該前綴指示值中的位元組數。最大長度為 4,294,967,295 或 4GB (232 − 1) 位元組的
BLOB
資料行。LONGBLOB
資料行的有效最大長度取決於用戶端/伺服器協定中設定的最大封包大小和可用記憶體。每個LONGBLOB
值都使用 4 位元組長度前綴儲存,該前綴指示值中的位元組數。LONGTEXT [CHARACTER SET
charset_name
] [COLLATEcollation_name
]最大長度為 4,294,967,295 或 4GB (232 − 1) 個字元的
TEXT
資料行。如果值包含多位元組字元,則有效最大長度會較短。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
是字元集中最大長度字元所需的位元組數。