字串資料類型為 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_LENGTHSQL 模式,否則在檢索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 SETcharset_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 SETcharset_name] [COLLATEcollation_name]最大長度為 16,777,215 (224 − 1) 個字元的
TEXT欄位。如果該值包含多位元組字元,則有效最大長度會較小。每個MEDIUMTEXT值都使用 3 位元組長度前綴來儲存,該前綴指示值中的位元組數。一個
BLOB欄位的最大長度為 4,294,967,295 或 4GB (232 − 1) 位元組。LONGBLOB欄位的有效最大長度取決於客戶端/伺服器協定中設定的最大封包大小以及可用的記憶體。每個LONGBLOB值都使用 4 位元組長度前綴來儲存,該前綴指示該值中的位元組數。LONGTEXT [CHARACTER SETcharset_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 且 (Mxw) <= 1020,其中M是元素文字長度,而w是字元集中最大長度字元所需的位元組數。SET('value1','value2',...) [CHARACTER SETcharset_name] [COLLATEcollation_name]一個集合。一個字串物件,可以有零個或多個值,每個值都必須從值列表
'、value1''、value2'...中選取。SET值在內部以整數表示。一個
SET欄位最多可以有 64 個不同的成員。單個
SET元素支援的最大長度為M<= 255 且 (Mxw) <= 1020,其中M是元素文字長度,而w是字元集中最大長度字元所需的位元組數。