10.10.7. 亚洲字符集

我们支持的亚洲字符集包括中文、日语、韩语和泰国语。这些可能比较复杂。例如,中文字符集必须考虑到上千种不同的字符。

·         big5Big5传统中文) 校对规则:

o        big5_bin

o        big5_chinese_ci( 默认)

·         cp932SJIS Windows日语)校对规则:

o        cp932_bin

o        cp932_japanese_ci( 默认)

·         eucjpmsUJIS Windows日语)校对规则:

o        eucjpms_bin

o        eucjpms_japanese_ci( 默认)

·         euckrEUC-KR 韩语)校对规则:

o        euckr_bin

o        euckr_korean_ci( 默认)

·         gb2312GB2312 简体中文)校对规则:

o        gb2312_bin

o        gb2312_chinese_ci( 默认)

·         gbkGBK简体中文) 校对规则:

o        gbk_bin

o        gbk_chinese_ci( 默认)

·         sjisShift-JIS 日语)校对规则:

o        sjis_bin

o        sjis_japanese_ci( 默认)

·         tis620TIS620 泰国语)校对规则:

o        tis620_bin

o        tis620_thai_ci( 默认)

·         ujisEUC-JP 日语)校对规则:

o        ujis_bin

o        ujis_japanese_ci( 默认)

10.10.7.1. cp932字符集

为什么需要cp932

MySQL中,sjis字符集对应于由IANA定义的Shift_JIS字符集,它支持JIS X0201JIS X0208字符。(见 http://www.iana.org/assignments/character-sets。)

但是,“SHIFT JIS”作为描述性术语的含义变得非常含糊不清,并且它常常包括由不同供应商定义的Shift_JIS扩展部分。

例如,使用在日本Windows环境中使用的“SHIFT JIS”是MicrosoftShift_JISMicrosoft扩展,它的准确名字是Microsoft Windows Codepage: 932cp932除由Shift_JIS支持的字符之外,cp932支持扩展字符,如NEC选择的IBM扩展字符和IBM扩展字符。

许多日本用户在使用这些扩展字符过程中碰到过一些问题。这些问题是由于以下情况引起的:

·         MySQL自动转换字符集。

·         字符集通过Unicode转换(ucs2)。

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

·         从号称“SHIFT JIS”到Unicode的转换,存在一些转换规则,并且一些字符转换到Unicode依赖不同的转换规则。MySQL仅支持这些转换规则中的一种(在后面描述)。

MySQLcp932字符集可以解决这些转换问题。

因为MySQL支持字符集转换,将IANA Shift_JIS cp932分离为两种不同字符集是重要的,因为它们提供不同的转换规则。

cp932sjis有什么不同?

cp932字符集与sjis存在以下不同点:

·         cp932支持NEC特殊字符、NEC选择的IBM扩展字符和IBM选择的字符。

·         一些cp932字符有两个不同的编码点,这两种编码点转换为相同Unicode编码点。因此,当从Unicode转换回到cp932时,必须选择一个编码点。对于这种“相互转换使用由Microsoft推荐的转换规则。(见 http//support.microsoft.com/kb/170559/EN-US/。)

转换规则如下:

o        如果字符在JIS X 0208 NEC特殊字符中同时存在,使用JIS X 0208 的编码点。

o        如果字符在NEC特殊字符和IBM选择的字符中同时存在,使用NEC特殊字符的编码点。

o        如果字符在IBM选择的字符和NEC选择的IBM扩展字符中同时存在,使用IBM扩展字符的编码点。

关于cp932字符的Unicode 值的列表显示信息见http://www.microsoft.com/globaldev/reference/dbcs/932.htm。对于cp932表中的带有下面有四位数字出现的字符的实体,数字代表相应的Unicodeucs2)编码。对于表中有两个带下划线的数字出现的实体,择有一个以那两个数字开头的cp932字符值的范围。点击一个这种表的实体,将带你到一个页,该页显示每个以那些数字开头的cp932字符的Unicode值。

以下连接很重要。它们与下列字符集的编码相对应:

o        NEC特殊字符:

http://www.microsoft.com/globaldev/reference/dbcs/932/932_87.htm

o        NEC选择的IBM扩展字符:

o                     http://www.microsoft.com/globaldev/reference/dbcs/932/932_ED.htm
o                     http://www.microsoft.com/globaldev/reference/dbcs/932/932_EE.htm

o        IBM选择的字符:

o                     http://www.microsoft.com/globaldev/reference/dbcs/932/932_FA.htm
o                     http://www.microsoft.com/globaldev/reference/dbcs/932/932_FB.htm
o                     http://www.microsoft.com/globaldev/reference/dbcs/932/932_FC.htm

·         cp932eucjpms结合支持用户自定义字符的转换,并且解决sjis/ujis转换问题。详细信息,请参见http://www.opengroup.or.jp/jvc/cde/sjis-euc-e.html

·         对于一些字符,与ucs2之间的转换与sjiscp932之间的转换是不同的。下表举例说明了这些不同。

转换到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

关注编程学问公众号