亚洲字符集
我们支持的亚洲字符集包括中文,日文,韩文和泰文。这些可能很复杂。例如,中文集必须允许成千上万个不同的字符。有关和字符集的更多信息,请参见“ cp932字符集”。有关支持中国国家标准GB 18030的字符集的更多信息,请参见“ gb18030字符集”。cp932sjis
有关与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_JISIANA定义的字符集,该字符集支持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归类。如果需要确保连字正确校验,请使用此校验规则。
