亚洲字符集
我们支持的亚洲字符集包括中文,日文,韩文和泰文。这些可能很复杂。例如,中文集必须允许成千上万个不同的字符。有关和字符集的更多信息,请参见“ cp932字符集”。有关支持中国国家标准GB 18030的字符集的更多信息,请参见“ gb18030字符集”。cp932
sjis
有关与MySQL支持亚洲字符集有关的一些常见问题的解答,请参见第A.11节“ MySQL 8.0 FAQ:MySQL中文,日文和韩文字符集”。
big5
(Big5繁体中文)归类:big5_bin
big5_chinese_ci
(默认)
cp932
(Windows日语的SJIS)校验规则:cp932_bin
cp932_japanese_ci
(默认)
eucjpms
(用于Windows日语的UJIS)校验规则:eucjpms_bin
eucjpms_japanese_ci
(默认)
euckr
(EUC-KR韩文)归类:euckr_bin
euckr_korean_ci
(默认)
gb2312
(GB2312简体中文)归类:gb2312_bin
gb2312_chinese_ci
(默认)
gbk
(GBK简体中文)归类:gbk_bin
gbk_chinese_ci
(默认)
gb18030
(中国国家标准GB18030)归类:gb18030_bin
gb18030_chinese_ci
(默认)gb18030_unicode_520_ci
sjis
(Shift-JIS日语)校验规则:sjis_bin
sjis_japanese_ci
(默认)
tis620
(TIS620 Thai)归类:tis620_bin
tis620_thai_ci
(默认)
ujis
(EUC-JP日语)校验规则:ujis_bin
ujis_japanese_ci
(默认)
在big5_chinese_ci
校验校验笔划数。
cp932字符集
为什么cp932
需要?
在MySQL中,sjis
字符集对应于Shift_JIS
IANA定义的字符集,该字符集支持JIS X0201和JIS X0208字符。(请参阅 http://www.iana.org/assignments/character-sets。)
但是,“ SHIFT JIS ”作为描述性术语的含义已经变得很模糊,并且通常包括Shift_JIS
各种供应商定义的扩展名。
例如,在日语Windows环境中使用的“ SHIFT JIS ”是Microsoft的扩展名,Shift_JIS
其确切名称是Microsoft Windows Codepage : 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/。)转换规则如下所示:
- 如果字符同时是JIS X 0208和NEC特殊字符,请使用JIS X 0208的代码点。
- 如果该字符同时是NEC特殊字符和IBM选择的字符,请使用NEC特殊字符的代码点。
- 如果该字符同时处于IBM选择的字符和NEC选择的IBM扩展字符中,请使用IBM扩展字符的代码点。
https://msdn.microsoft.com/zh-cn/goglobal/cc305152.aspx 上显示的表提供了有关字符Unicode值的信息
cp932
。对于cp932
带有四位数数字的字符的表条目,该数字表示相应的Unicode(ucs2
)编码。对于出现带有下划线两位数值的表条目,存在cp932
以这两位数字开头的一系列字符值。单击此类表条目将带您到一个页面,该页面显示cp932
以这些数字开头的每个字符的Unicode值。以下链接特别有趣。它们对应于以下字符集的编码:
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
/ujis
转换问题。有关详细信息,请参阅 http://www.sljfaq.org/afaq/encodings.html。
对于某些字符,转换和从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 | 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 |
使用任何日语字符集的用户都应注意,使用--character-set-client-handshake
(或--skip-character-set-client-handshake
)具有重要的作用。请参见“服务器命令选项”。
gb18030字符集
在MySQL中,gb18030
字符集对应于“中国国家标准GB 18030-2005:信息技术-中文编码字符集”,它是中华人民共和国(PRC)的官方字符集。
MySQL gb18030字符集的特征
- 支持GB 18030-2005标准定义的所有代码点。(GB + 8431A439,GB + 90308130)和(GB + E3329A36,GB + EF39EF39)范围内未分配的代码点被视为'
?
'(0x3F)。未分配代码点的转换返回“?
”。 - 支持所有GB18030代码点的上,下转换。还支持Unicode定义的大小写折叠(基于
CaseFolding-6.3.0.txt
)。 - 支持与其他字符集之间的数据转换。
- 支持SQL语句,例如
SET NAMES
。 - 支持
gb18030
字符串之间gb18030
以及字符串和其他字符集的字符串之间的比较。如果字符串具有不同的字符集,则会进行转换。还支持包含或忽略尾随空格的比较。 - Unicode中的专用区域(U + E000,U + F8FF)映射到
gb18030
。 - (U + D800,U + DFFF)与GB18030之间没有映射。尝试转换此范围内的代码点将返回“
?
”。 - 如果输入序列不合法,则会返回错误或警告。如果在中使用了非法序列
CONVERT()
,则会返回错误。否则,将返回警告。 - 为了与
utf8
和保持一致,utf8mb4
连字不支持UPPER。 - 使用
gb18030_unicode_520_ci
校验规则时,对连字的搜索还匹配大写连字。 - 如果一个字符有多个大写字符,则所选的大写字符为小写字符本身。
- 多字节的最小长度为1,最大为4。字符集使用前1个或2个字节来确定序列的长度。
支持的归类
gb18030_bin
:二进制校验规则。gb18030_chinese_ci
:默认校验规则,支持拼音。非中文字符的校验基于原始校验键的顺序。原始校验键GB(UPPER(ch))
是否UPPER(ch)
存在。否则,原始校验键为GB(ch)
。汉字根据Unicode通用语言环境数据存储库(CLDR 24)中定义的拼音校验规则进行校验。非中文字符在中文字符之前校验,但除外GB +FE39FE39
,后者是最大的代码点。gb18030_unicode_520_ci
:Unicode归类。如果需要确保连字正确校验,请使用此校验规则。