文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  字串資料類型語法

13.3.1 字串資料類型語法

字串資料類型為 CHARVARCHARBINARYVARBINARYBLOBTEXTENUMSET

在某些情況下,MySQL 可能會將字串欄位變更為與 CREATE TABLEALTER TABLE 陳述式中給定的類型不同的類型。請參閱 第 15.1.20.7 節「靜默欄位規格變更」

對於字元字串欄位(CHARVARCHARTEXT 類型)的定義,MySQL 會以字元單位解譯長度規格。對於二進位字串欄位(BINARYVARBINARYBLOB 類型)的定義,MySQL 會以位元組單位解譯長度規格。

字元字串資料類型 CHARVARCHARTEXT 類型、ENUMSET 和任何同義詞的欄位定義都可以指定欄位的字元集和校對

  • 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 SETCOLLATE 屬性時,或缺少其中之一時,指定字元集和校對的規則,請參閱 第 12.3.5 節「欄位字元集和校對」

    CHARSETCHARACTER SET 的同義詞。

  • 為字元字串資料類型指定 CHARACTER SET binary 屬性會導致將該欄位建立為對應的二進位字串資料類型:CHAR 變為 BINARYVARCHAR 變為 VARBINARY,而 TEXT 變為 BLOB。對於 ENUMSET 資料類型,則不會發生這種情況;它們會按宣告的方式建立。假設您使用此定義來指定表格

    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

字元欄位的比較和排序是基於指派給該欄位的定序。對於 CHARVARCHARTEXTENUMSET 資料類型,您可以宣告具有二進位 (_bin) 定序或 BINARY 屬性的欄位,以使比較和排序使用基礎字元碼值,而不是使用語彙順序。

如需更多關於在 MySQL 中使用字元集的資訊,請參閱第 12 章,字元集、定序、Unicode

  • [NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

    固定長度的字串,在儲存時總是使用空格向右填補到指定的長度。M 代表欄位的字元長度。M 的範圍是 0 到 255。如果省略 M,則長度為 1。

    注意

    除非啟用 PAD_CHAR_TO_FULL_LENGTH SQL 模式,否則在檢索 CHAR 值時,會移除尾隨空格。

    CHARCHARACTER 的簡寫。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 SET charset_name] [COLLATE collation_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 值中移除尾隨空格。

    VARCHARCHARACTER VARYING 的簡寫。NATIONAL VARCHAR 是標準 SQL 定義 VARCHAR 欄位應使用某些預定義字元集的方式。MySQL 使用 utf8mb3 作為此預定義字元集。請參閱第 12.3.7 節,「國家字元集」NVARCHARNATIONAL VARCHAR 的簡寫。

  • BINARY[(M)]

    BINARY 類型類似於 CHAR 類型,但是儲存的是二進位位元組字串而不是非二進位字元字串。選用的長度 M 代表欄位的位元組長度。如果省略,M 預設為 1。

  • VARBINARY(M)

    VARBINARY 類型類似於 VARCHAR 類型,但是儲存的是二進位位元組字串而不是非二進位字元字串。M 代表欄位的最大位元組長度。

  • TINYBLOB

    最大長度為 255 (28 − 1) 個位元組的 BLOB 欄位。每個 TINYBLOB 值都使用 1 位元組的長度前綴來儲存,該前綴指示值的位元組數。

  • TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長度為 255 (28 − 1) 個字元的 TEXT 欄位。如果值包含多位元組字元,則有效最大長度會較短。每個 TINYTEXT 值都使用 1 位元組的長度前綴來儲存,該前綴指示值的位元組數。

  • BLOB[(M)]

    最大長度為 65,535 (216 − 1) 個位元組的 BLOB 欄位。每個 BLOB 值都使用 2 位元組的長度前綴來儲存,該前綴指示值的位元組數。

    可以為此類型指定選用的長度 M。如果這樣做,MySQL 會建立該欄位作為最小的 BLOB 類型,該類型足以容納 M 個位元組長的值。

  • TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長度為 65,535 (216 − 1) 個字元的 TEXT 欄位。如果值包含多位元組字元,則有效最大長度會較短。每個 TEXT 值都使用 2 位元組的長度前綴來儲存,該前綴指示值的位元組數。

    可以為此類型指定選用的長度 M。如果這樣做,MySQL 會建立該欄位作為最小的 TEXT 類型,該類型足以容納 M 個字元長的值。

  • MEDIUMBLOB

    最大長度為 16,777,215 (224 − 1) 個位元組的 BLOB 欄位。每個 MEDIUMBLOB 值都使用 3 位元組的長度前綴來儲存,該前綴指示值的位元組數。

  • MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長度為 16,777,215 (224 − 1) 個字元的 TEXT 資料行。如果值包含多位元組字元,則有效最大長度會較短。每個 MEDIUMTEXT 值都使用 3 位元組長度前綴儲存,該前綴指示值中的位元組數。

  • LONGBLOB

    最大長度為 4,294,967,295 或 4GB (232 − 1) 位元組的 BLOB 資料行。LONGBLOB 資料行的有效最大長度取決於用戶端/伺服器協定中設定的最大封包大小和可用記憶體。每個 LONGBLOB 值都使用 4 位元組長度前綴儲存,該前綴指示值中的位元組數。

  • LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長度為 4,294,967,295 或 4GB (232 − 1) 個字元的 TEXT 資料行。如果值包含多位元組字元,則有效最大長度會較短。LONGTEXT 資料行的有效最大長度也取決於用戶端/伺服器協定中設定的最大封包大小和可用記憶體。每個 LONGTEXT 值都使用 4 位元組長度前綴儲存,該前綴指示值中的位元組數。

  • ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

    一個列舉。一個字串物件,只能有一個值,從 'value1''value2'...NULL 或特殊的 '' 錯誤值清單中選擇。ENUM 值在內部表示為整數。

    一個 ENUM 資料行最多可以有 65,535 個不同的元素。

    個別 ENUM 元素支援的最大長度為 M <= 255 且 (M x w) <= 1020,其中 M 是元素字面長度,而 w 是字元集中最大長度字元所需的位元組數。

  • SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

    一個集合。一個字串物件,可以有零個或多個值,每個值都必須從 'value1''value2'... 值清單中選擇。SET 值在內部表示為整數。

    一個 SET 資料行最多可以有 64 個不同的成員。

    個別 SET 元素支援的最大長度為 M <= 255 且 (M x w) <= 1020,其中 M 是元素字面長度,而 w 是字元集中最大長度字元所需的位元組數。