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


12.10.7.1 cp932 字元集

為什麼需要 cp932

在 MySQL 中,sjis 字元集對應於 IANA 定義的 Shift_JIS 字元集,它支援 JIS X0201 和 JIS X0208 字元。(請參閱 http://www.iana.org/assignments/character-sets。)

然而,作為描述性術語的「SHIFT JIS」的含義變得非常模糊,並且它通常包含各種供應商定義的 Shift_JIS 擴充功能。

例如,在日本 Windows 環境中使用的「SHIFT JIS」是 Shift_JIS 的 Microsoft 擴充功能,其確切名稱為 Microsoft Windows Codepage : 932cp932。除了 Shift_JIS 支援的字元之外,cp932 還支援 NEC 特殊字元、NEC 選取的 IBM 擴充字元和 IBM 選取的字元等擴充字元。

許多日本使用者在使用這些擴充字元時遇到了問題。這些問題源於以下因素

  • MySQL 會自動轉換字元集。

  • 字元集會使用 Unicode (ucs2) 進行轉換。

  • sjis 字元集不支援這些擴充字元的轉換。

  • 從所謂的「SHIFT JIS」到 Unicode 有幾種轉換規則,並且某些字元會根據轉換規則以不同的方式轉換為 Unicode。MySQL 僅支援其中一個規則(稍後說明)。

MySQL cp932 字元集旨在解決這些問題。

由於 MySQL 支援字元集轉換,因此將 IANA Shift_JIScp932 分隔為兩個不同的字元集非常重要,因為它們提供不同的轉換規則。

cp932sjis 有何不同?

cp932 字元集與 sjis 的不同之處在於以下幾點

  • cp932 支援 NEC 特殊字元、NEC 選取的 IBM 擴充字元和 IBM 選取的字元。

  • 某些 cp932 字元有兩個不同的碼點,它們都會轉換為相同的 Unicode 碼點。從 Unicode 轉換回 cp932 時,必須選取其中一個碼點。對於此「往返轉換,」會使用 Microsoft 建議的規則。(請參閱 http://support.microsoft.com/kb/170559/EN-US/。)

    轉換規則如下

    • 如果字元同時位於 JIS X 0208 和 NEC 特殊字元中,則使用 JIS X 0208 的碼點。

    • 如果字元同時位於 NEC 特殊字元和 IBM 選取的字元中,則使用 NEC 特殊字元的碼點。

    • 如果字元同時位於 IBM 選取的字元和 NEC 選取的 IBM 擴充字元中,則使用 IBM 擴充字元的碼點。

    https://msdn.microsoft.com/en-us/goglobal/cc305152.aspx 中顯示的表格提供有關 cp932 字元 Unicode 值資訊。對於表格中字元下方顯示四位數的 cp932 表格項目,該數字表示對應的 Unicode (ucs2) 編碼。對於表格項目中出現帶底線的兩位數值,則表示以這兩個數字開頭的一系列 cp932 字元值。按一下這類表格項目會將您帶到一個頁面,其中顯示每個以這些數字開頭的 cp932 字元的 Unicode 值。

    以下連結特別感興趣。它們對應於以下字元集的編碼

    • NEC 特殊字元 (前導位元組 0x87)

      https://msdn.microsoft.com/en-us/goglobal/gg674964
    • NEC 選取的 IBM 擴充字元 (前導位元組 0xED0xEE)

      https://msdn.microsoft.com/en-us/goglobal/gg671837
      https://msdn.microsoft.com/en-us/goglobal/gg671838
    • IBM 選取的字元 (前導位元組 0xFA0xFB0xFC)

      https://msdn.microsoft.com/en-us/goglobal/gg671839
      https://msdn.microsoft.com/en-us/goglobal/gg671840
      https://msdn.microsoft.com/en-us/goglobal/gg671841
  • cp932 支援使用者定義字元與 eucjpms 結合的轉換,並解決 sjis/ujis 轉換的問題。詳細資訊,請參閱 http://www.sljfaq.org/afaq/encodings.html

對於某些字元,sjiscp932ucs2 轉換和轉換回 ucs2 的方式不同。下表說明了這些差異。

轉換為 ucs2

sjis/cp932 sjis -> ucs2 轉換 cp932 -> ucs2 轉換
5C 005C 005C
7E 007E 007E
815C 2015 2015
815F 005C FF3C
8160 301C FF5E
8161 2016 2225
817C 2212 FF0D
8191 00A2 FFE0
8192 00A3 FFE1
81CA 00AC FFE2

ucs2 轉換

ucs2 ucs2 -> sjis 轉換 ucs2 -> cp932 轉換
005C 815F 5C
007E 7E 7E
00A2 8191 3F
00A3 8192 3F
00AC 81CA 3F
2015 815C 815C
2016 8161 3F
2212 817C 3F
2225 3F 8161
301C 8160 3F
FF0D 3F 817C
FF3C 3F 815F
FF5E 3F 8160
FFE0 3F 8191
FFE1 3F 8192
FFE2 3F 81CA