文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 9.0 中,BINARY 屬性已過時,而且您應該預期在未來的 MySQL 版本中會移除對它的支援。應用程式應調整為改用明確的 _bin 校對。

    使用 BINARY 來指定資料類型或字元集的方式保持不變。

  • ASCII 屬性是 CHARACTER SET latin1 的簡寫。舊版 MySQL 版本支援 ASCII,但 ASCII 已過時;請改用 CHARACTER SET

  • UNICODE 屬性是 CHARACTER SET ucs2 的簡寫。在較舊的 MySQL 版本中支援,UNICODE 已被棄用;請改用 CHARACTER SET

字元欄位的比較和排序是基於指派給該欄位的校對 (collation)。對於 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 位元組的長度前綴加上資料。長度前綴指示值中的位元組數。如果值不需要超過 255 個位元組,則 VARCHAR 欄位使用一個長度位元組;如果值可能需要超過 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

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

  • LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    一個 TEXT 欄位的最大長度為 4,294,967,295 或 4GB (232 − 1) 個字元。如果該值包含多位元組字元,則有效最大長度會較小。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 是字元集中最大長度字元所需的位元組數。