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


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」是 Microsoft 對 Shift_JIS 的擴充,它的確切名稱是 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

對於某些字元,在 sjiscp932 之間轉換為和從 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