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


MySQL 8.4 參考手冊  /  ...  /  資料欄字元集與校對

12.3.5 資料欄字元集與校對

每個字元資料欄(即,類型為 CHARVARCHARTEXT 類型或任何同義詞的資料欄)都有一個資料欄字元集和一個資料欄校對。用於 CREATE TABLEALTER TABLE 的資料欄定義語法具有用於指定資料欄字元集和校對的可選子句

col_name {CHAR | VARCHAR | TEXT} (col_length)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]

這些子句也可以用於 ENUMSET 資料欄

col_name {ENUM | SET} (val_list)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]

範例

CREATE TABLE t1
(
    col1 VARCHAR(5)
      CHARACTER SET latin1
      COLLATE latin1_german1_ci
);

ALTER TABLE t1 MODIFY
    col1 VARCHAR(5)
      CHARACTER SET latin1
      COLLATE latin1_swedish_ci;

MySQL 按照以下方式選擇資料欄字元集和校對

  • 如果同時指定 CHARACTER SET charset_nameCOLLATE collation_name,則使用字元集 charset_name 和校對 collation_name

    CREATE TABLE t1
    (
        col1 CHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
    ) CHARACTER SET latin1 COLLATE latin1_bin;

    字元集和校對是針對資料欄指定的,因此會使用它們。資料欄具有字元集 utf8mb4 和校對 utf8mb4_unicode_ci

  • 如果指定了 CHARACTER SET charset_name 而沒有 COLLATE,則使用字元集 charset_name 及其預設校對。

    CREATE TABLE t1
    (
        col1 CHAR(10) CHARACTER SET utf8mb4
    ) CHARACTER SET latin1 COLLATE latin1_bin;

    字元集是針對資料欄指定的,但校對不是。資料欄具有字元集 utf8mb4utf8mb4 的預設校對,即 utf8mb4_0900_ai_ci。若要查看每個字元集的預設校對,請使用 SHOW CHARACTER SET 陳述式或查詢 INFORMATION_SCHEMA CHARACTER_SETS 資料表。

  • 如果指定了 COLLATE collation_name 而沒有 CHARACTER SET,則使用與 collation_name 相關聯的字元集和校對 collation_name

    CREATE TABLE t1
    (
        col1 CHAR(10) COLLATE utf8mb4_polish_ci
    ) CHARACTER SET latin1 COLLATE latin1_bin;

    校對是針對資料欄指定的,但字元集不是。資料欄具有校對 utf8mb4_polish_ci,而字元集是與校對相關聯的字元集,即 utf8mb4

  • 否則(既未指定 CHARACTER SET 也未指定 COLLATE),則使用資料表字元集和校對。

    CREATE TABLE t1
    (
        col1 CHAR(10)
    ) CHARACTER SET latin1 COLLATE latin1_bin;

    未針對資料欄指定字元集或校對,因此使用資料表預設值。資料欄具有字元集 latin1 和校對 latin1_bin

CHARACTER SETCOLLATE 子句是標準 SQL。

如果您使用 ALTER TABLE 將資料欄從一個字元集轉換為另一個字元集,MySQL 會嘗試對資料值進行對應,但如果字元集不相容,則可能會發生資料遺失。