# 10.10.7.1 cp932 字符集
为什么是cp932
需要吗?
在 MySQL 中,sjis
字符集对应Shift_JIS
IANA 定义的字符集,支持 JIS X0201 和 JIS X0208 字符。(看http://www.iana.org/assignments/character-sets (opens new window).)
然而,“SHIFT JIS”作为描述性术语的含义已经变得非常模糊,它通常包括对Shift_JIS
由不同的供应商定义。
例如,日文 Windows 环境中使用的“SHIFT JIS”是 Microsoft 对Shift_JIS
它的确切名称是Microsoft Windows 代码页:932
要么cp932
.除了支持的字符Shift_JIS
,cp932
支持扩展字符,例如 NEC 特殊字符、NEC 选择—IBM 扩展字符和 IBM 选择字符。
许多日本用户在使用这些扩展字符时遇到了问题。这些问题源于以下因素:
MySQL 自动转换字符集。
字符集使用 Unicode (
ucs2
)。这
sjis
字符集不支持这些扩展字符的转换。从所谓的“SHIFT JIS”到 Unicode 有几种转换规则,根据转换规则的不同,某些字符转换为 Unicode 的方式也不同。MySQL 仅支持这些规则之一(稍后描述)。
MySQL的
cp932
字符集就是为了解决这些问题而设计的。因为 MySQL 支持字符集转换,所以分离 IANA 很重要
Shift_JIS
和cp932
分成两个不同的字符集,因为它们提供了不同的转换规则。
如何cp932
与......不同sjis
?
这cp932
字符集不同于sjis
通过以下方式:
cp932
支持 NEC 特殊字符、NEC 选择 - IBM 扩展字符和 IBM 选择字符。一些
cp932
字符有两个不同的代码点,它们都转换为相同的 Unicode 代码点。当从 Unicode 转换回cp932
,必须选择其中一个代码点。对于这种“往返转换”,使用了 Microsoft 推荐的规则。(看http://support.microsoft.com/kb/170559/EN-US/ (opens new window).)转换规则是这样工作的:
如果字符同时在 JIS X 0208 和 NEC 特殊字符中,则使用 JIS X 0208 的代码点。
如果该字符同时在 NEC 特殊字符和 IBM 选定字符中,则使用 NEC 特殊字符的代码点。
如果字符在 IBM 选定字符和 NEC 选定字符中都存在 - IBM 扩展字符,请使用 IBM 扩展字符的代码点。
该表显示在https://msdn.microsoft.com/en-us/goglobal/cc305152.aspx (opens new window)提供有关 Unicode 值的信息
cp932
人物。为了cp932
带有字符的表条目,其下出现一个四位数的数字,该数字代表相应的 Unicode (ucs2
) 编码。对于带有下划线的两位数值的表格条目,有一个范围cp932
以这两位数字开头的字符值。单击此类表条目会将您带到一个页面,该页面显示每个表的 Unicode 值cp932
以这些数字开头的字符。以下链接特别有趣。它们对应于以下字符集的编码:
NEC 特殊字符(前导字节
0x87
):https://msdn.microsoft.com/en-us/goglobal/gg674964
选择 NEC — IBM 扩展字符(前导字节
0xED
和0xEE
):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
/乌吉斯
转换。详情请参阅http://www.sljfaq.org/afaq/encodings.html (opens new window).对于某些字符,转换为和从
ucs2
是不同的sjis
和cp932
.下表说明了这些差异。转换为
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 | 815 楼 | 生菜 |
007 | H | H |
00一 | 8191 | 打扰一下 |
00 | 8192 | 打扰一下 |
00S | 81 | 打扰一下 |
2015 | 815 | 815 |
2016 年 | 8161 | 打扰一下 |
2212 | 817 | 打扰一下 |
2225 | 打扰一下 | 8161 |
301s | 8160 | 打扰一下 |
FF0D | 3F | 817C |
FF3C | 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.7 节,“服务器命令选项”.