文件首頁
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


12.9 Unicode 支援

Unicode 標準包含基本多文種平面 (BMP) 中的字元,以及位於 BMP 之外的補充字元。本節描述 MySQL 中對 Unicode 的支援。如需 Unicode 標準本身的相關資訊,請造訪 Unicode 協會網站

BMP 字元具有以下特性

  • 它們的碼位值介於 0 和 65535 之間(或 U+0000U+FFFF)。

  • 它們可以使用 8、16 或 24 位元(1 到 3 個位元組)的可變長度編碼進行編碼。

  • 它們可以使用 16 位元(2 個位元組)的固定長度編碼進行編碼。

  • 它們足以應付主要語言中幾乎所有字元。

補充字元位於 BMP 之外

  • 它們的碼位值介於 U+10000U+10FFFF 之間。

  • 對補充字元的 Unicode 支援需要具有 BMP 字元之外範圍的字元集,因此比 BMP 字元佔用更多空間(每個字元最多 4 個位元組)。

UTF-8 (Unicode Transformation Format with 8-bit units) 方法,用於根據 RFC 3629 編碼 Unicode 資料,該 RFC 描述了從 1 到 4 個位元組的編碼序列。UTF-8 的概念是使用不同長度的位元組序列對各種 Unicode 字元進行編碼

  • 基本拉丁字母、數字和標點符號使用一個位元組。

  • 大多數歐洲和中東腳本字母適合 2 位元組序列:擴充拉丁字母(帶有波浪號、長音符號、銳音符號、重音符號和其他變音符號)、斯拉夫語、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語等。

  • 韓文、中文和日文表意文字使用 3 位元組或 4 位元組序列。

MySQL 支援這些 Unicode 字元集

  • utf8mb4:Unicode 字元集的 UTF-8 編碼,每個字元使用一到四個位元組。

  • utf8mb3:Unicode 字元集的 UTF-8 編碼,每個字元使用一到三個位元組。此字元集已被棄用,可能會在未來版本中移除;請改用 utf8mb4

  • utf8utf8mb3 的已棄用別名;請改用 utf8mb4

    注意

    預計在未來版本的 MySQL 中,utf8 將成為 utf8mb4 的別名。

  • ucs2:Unicode 字元集的 UCS-2 編碼,每個字元使用兩個位元組。已棄用;預期將在未來版本中移除對此字元集的支援。

  • utf16:Unicode 字元集的 UTF-16 編碼,每個字元使用兩個或四個位元組。與 ucs2 類似,但擴充了對補充字元的支援。

  • utf16le:Unicode 字元集的 UTF-16LE 編碼。與 utf16 類似,但為小端而非大端。

  • utf32:Unicode 字元集的 UTF-32 編碼,每個字元使用四個位元組。

注意

utf8mb3 字元集已被棄用,您應該預期它會在未來的 MySQL 版本中被移除。請改用 utf8mb4utf8 目前是 utf8mb3 的別名,但現在已被棄用,而 utf8 預計隨後會成為對 utf8mb4 的引用。MySQL 9.0 還會在資訊綱要表格的欄位中,以及 SQL SHOW 語句的輸出中顯示 utf8mb3 而不是 utf8

此外,您應該知道,在舊版 MySQL 中使用 utf8_ 前綴的校對,之後已使用 utf8mb3_ 前綴重新命名。

為了避免 utf8 含義的歧義,請考慮針對字元集引用明確指定 utf8mb4

表 12.2,「Unicode 字元集一般特性」所述,其中摘要了 MySQL 支援的 Unicode 字元集的一般特性。

表 12.2 Unicode 字元集一般特性

字元集 支援的字元 每個字元所需的儲存空間
utf8mb3utf8 (已棄用) 僅限 BMP 1、2 或 3 個位元組
ucs2 僅限 BMP 2 個位元組
utf8mb4 BMP 和補充字元 1、2、3 或 4 個位元組
utf16 BMP 和補充字元 2 或 4 個位元組
utf16le BMP 和補充字元 2 或 4 個位元組
utf32 BMP 和補充字元 4 個位元組

當轉換為僅支援 BMP 字元的 Unicode 字元集 (utf8mb3ucs2) 時,BMP 以外的字元會被視為 REPLACEMENT CHARACTER 並轉換為 '?'

如果您使用支援補充字元,且因此比僅限 BMP 的 utf8mb3ucs2 字元集更「」的字元集,則您的應用程式可能會出現不相容的問題;請參閱第 12.9.8 節,「轉換 3 位元組和 4 位元組 Unicode 字元集」。該章節還說明如何將表格從 (3 位元組) utf8mb3 轉換為 (4 位元組) utf8mb4,以及這樣做時可能適用的限制。

大多數 Unicode 字元集都有類似的一組校對規則。例如,每個字元集都有丹麥校對規則,其名稱為 utf8mb4_danish_ciutf8mb3_danish_ci (已棄用)、utf8_danish_ci (已棄用)、ucs2_danish_ciutf16_danish_ciutf32_danish_ci。例外的是 utf16le,它只有兩個校對規則。關於 Unicode 校對及其區分特性,包括補充字元的校對特性,請參閱第 12.10.1 節,「Unicode 字元集」

MySQL 對 UCS-2、UTF-16 和 UTF-32 的實作以大端位元組順序儲存字元,並且不在值的開頭使用位元組順序標記 (BOM)。其他資料庫系統可能會使用小端位元組順序或 BOM。在這種情況下,在這些系統和 MySQL 之間傳輸資料時,需要執行值的轉換。UTF-16LE 的實作是小端位元組序。

MySQL 對於 UTF-8 值不使用 BOM。

使用 Unicode 與伺服器通訊的客戶端應用程式應相應地設定客戶端字元集(例如,發出 SET NAMES 'utf8mb4' 陳述式)。某些字元集不能用作客戶端字元集。嘗試將它們與SET NAMESSET CHARACTER SET 一起使用會產生錯誤。請參閱不允許的客戶端字元集

以下章節提供有關 MySQL 中 Unicode 字元集的更多詳細資訊。