文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
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 轉換格式,使用 8 位元單位)方法對 Unicode 資料進行編碼是根據 RFC 3629 實作的,該 RFC 描述了採用一到四個位元組的編碼序列。UTF-8 的概念是使用不同長度的位元組序列對各種 Unicode 字元進行編碼

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

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

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

MySQL 支援這些 Unicode 字元集

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

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

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

    注意

    utf8 預計在未來版本的 MySQL 中成為 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 8.4 也會在 Information Schema 表格的資料行中以及 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 之外的字元在轉換為僅支援 BMP 字元的 Unicode 字元集(utf8mb3ucs2)時會比較為 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 字元集的更多詳細資訊。