字串資料類型為 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_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 位元組的長度前綴加上資料。長度前綴指示值的位元組數。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 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 位元組長度前綴儲存,該前綴指示值中的位元組數。最大長度為 4,294,967,295 或 4GB (232 − 1) 位元組的
BLOB資料行。LONGBLOB資料行的有效最大長度取決於用戶端/伺服器協定中設定的最大封包大小和可用記憶體。每個LONGBLOB值都使用 4 位元組長度前綴儲存,該前綴指示值中的位元組數。LONGTEXT [CHARACTER SETcharset_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 且 (Mxw) <= 1020,其中M是元素字面長度,而w是字元集中最大長度字元所需的位元組數。SET('value1','value2',...) [CHARACTER SETcharset_name] [COLLATEcollation_name]一個集合。一個字串物件,可以有零個或多個值,每個值都必須從
'、value1''、value2'...值清單中選擇。SET值在內部表示為整數。一個
SET資料行最多可以有 64 個不同的成員。個別
SET元素支援的最大長度為M<= 255 且 (Mxw) <= 1020,其中M是元素字面長度,而w是字元集中最大長度字元所需的位元組數。