文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 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 參考手冊  /  ...  /  資料行字元集和校對

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 SETCOLLATE),則會使用資料表的字元集和校對。

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

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

CHARACTER SETCOLLATE 子句是標準 SQL。

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