Documentation Home

10.10.7.1 cp932 字符集

为什么cp932 需要?

在MySQL中,sjis字符集对应Shift_JISIANA定义的字符集,支持JIS X0201和JIS X0208字符。(参见 http://www.iana.org/assignments/character-sets。)

然而,SHIFT JIS作为一个描述性术语的含义已经变得非常模糊,它通常包括Shift_JIS各种供应商定义的扩展。

例如,日语 Windows 环境中使用的 SHIFT JISShift_JIS是 Microsoft 的扩展名,其确切名称是 Microsoft Windows Codepage : 932cp932。除了 支持的字符外Shift_JIS, 还cp932支持扩展字符,如 NEC 特殊字符、NEC selected—IBM 扩展字符、IBM selected 字符。

许多日本用户在使用这些扩展字符时遇到问题。这些问题源于以下因素:

  • MySQL 自动转换字符集。

  • 字符集使用 Unicode ( ucs2) 进行转换。

  • sjis字符集不支持这些扩展字符的转换 。

  • 从所谓的 SHIFT JIS到 Unicode 的转换规则有几种,根据转换规则,某些字符转换为 Unicode 的方式也不同。MySQL 只支持这些规则之一(稍后描述)。

MySQLcp932字符集就是为了解决这些问题而设计的。

因为 MySQL 支持字符集转换,所以将 IANAShift_JIScp932分成两个不同的字符集很重要,因为它们提供不同的转换规则。

与有何cp932不同?sjis

cp932字符集 在 以下sjis方面有所不同:

  • cp932支持 NEC 特殊字符、NEC selected—IBM 扩展字符和 IBM selected 字符。

  • 一些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 中显示的表格 提供了有关字符的 Unicode 值的信息 cp932。对于 cp932其下出现四位数字的字符的表条目,该数字表示相应的 Unicode ( ucs2) 编码。对于带有带下划线的两位数值的表条目,存在 cp932以这两位数开头的字符值范围。单击此类表条目会将您带到一个页面,该页面显示 cp932以这些数字开头的每个字符的 Unicode 值。

    以下链接特别有趣。它们对应于以下字符集的编码:

    • NEC 特殊字符(前导字节 0x87):

      https://msdn.microsoft.com/en-us/goglobal/gg674964
    • NEC selected—IBM 扩展字符(前导字节 0xED0xEE):

      https://msdn.microsoft.com/en-us/goglobal/gg671837
      https://msdn.microsoft.com/en-us/goglobal/gg671838
    • IBM 精选字符(前导字节 0xFA, 0xFB, 0xFC):

      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

对于某些字符,与 之间的相互转换 ucs2是不同 sjiscp932。下表说明了这些差异。

转换为ucs2

sjis/cp932 sjis->ucs2转换 cp932->ucs2转换
5C 005C 005C
7E 007E 007E
815C 2015年 2015年
815F 005C 最终幻想3
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
最终幻想3 3F 815F
FF5E 3F 8160
FFE0 3F 8191
FFE1 3F 8192
FFE2 3F 81CA

任何日语字符集的用户都应该知道使用 --character-set-client-handshake (或 --skip-character-set-client-handshake)具有重要的作用。请参阅第 5.1.6 节,“服务器命令选项”