当前位置: 首页 > 文档资料 > MySQL 中文手册 >

10.10. MySQL支持的字符集和校对

优质
小牛编辑
129浏览
2023-12-01
10.10.1. Unicode字符集
10.10.2. 西欧字符集
10.10.3. 中欧字符集
10.10.4. 南欧与中东字符集
10.10.5. 波罗的海字符集
10.10.6. 西里尔字符集
10.10.7. 亚洲字符集

MySQL支持30多种字符集的70多种校对规则。字符集和它们的默认校对规则可以通过SHOW CHARACTER SET语句显示:

mysql> SHOW CHARACTER SET;+----------+-----------------------------+---------------------+| Charset  | Description | Default collation   |+----------+-----------------------------+---------------------+| big5     | Big5 Traditional Chinese    | big5_chinese_ci     || dec8     | DEC West European   | dec8_swedish_ci     || cp850    | DOS West European   | cp850_general_ci    || hp8      | HP West European    | hp8_english_ci      || koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    || latin1   | cp1252 West European| latin1_swedish_ci   || latin2   | ISO 8859-2 Central European | latin2_general_ci   || swe7     | 7bit Swedish| swe7_swedish_ci     || ascii    | US ASCII    | ascii_general_ci    || ujis     | EUC-JP Japanese     | ujis_japanese_ci    || sjis     | Shift-JIS Japanese  | sjis_japanese_ci    || hebrew   | ISO 8859-8 Hebrew   | hebrew_general_ci   || tis620   | TIS620 Thai | tis620_thai_ci      || euckr    | EUC-KR Korean       | euckr_korean_ci     || koi8u    | KOI8-U Ukrainian    | koi8u_general_ci    || gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   || greek    | ISO 8859-7 Greek    | greek_general_ci    || cp1250   | Windows Central European    | cp1250_general_ci   || gbk      | GBK Simplified Chinese      | gbk_chinese_ci      || latin5   | ISO 8859-9 Turkish  | latin5_turkish_ci   || armscii8 | ARMSCII-8 Armenian  | armscii8_general_ci || utf8     | UTF-8 Unicode       | utf8_general_ci     || ucs2     | UCS-2 Unicode       | ucs2_general_ci     || cp866    | DOS Russian | cp866_general_ci    || keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  || macce    | Mac Central European| macce_general_ci    || macroman | Mac West European   | macroman_general_ci || cp852    | DOS Central European| cp852_general_ci    || latin7   | ISO 8859-13 Baltic  | latin7_general_ci   || cp1251   | Windows Cyrillic    | cp1251_general_ci   || cp1256   | Windows Arabic      | cp1256_general_ci   || cp1257   | Windows Baltic      | cp1257_general_ci   || binary   | Binary pseudo charset       | binary      || geostd8  | GEOSTD8 Georgian    | geostd8_general_ci  || cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   || eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |+----------+-----------------------------+---------------------+

10.10.1. Unicode字符集

MySQL有两种Unicode字符集。你能够使用这些字符集保存大约650种语言的文本。

·ucs2 (UCS-2 Unicode)校对规则:

  • mysql> SHOW COLLATION LIKE 'ucs2%';+--------------------+---------+-----+---------+----------+---------+| Collation  | Charset | Id  | Default | Compiled | Sortlen |+--------------------+---------+-----+---------+----------+---------+| ucs2_general_ci    | ucs2    |  35 | Yes     | Yes      |       1 || ucs2_bin   | ucs2    |  90 | | Yes      |       1 || ucs2_unicode_ci    | ucs2    | 128 | | Yes      |       8 || ucs2_icelandic_ci  | ucs2    | 129 | | Yes      |       8 || ucs2_latvian_ci    | ucs2    | 130 | | Yes      |       8 || ucs2_romanian_ci   | ucs2    | 131 | | Yes      |       8 || ucs2_slovenian_ci  | ucs2    | 132 | | Yes      |       8 || ucs2_polish_ci     | ucs2    | 133 | | Yes      |       8 || ucs2_estonian_ci   | ucs2    | 134 | | Yes      |       8 || ucs2_spanish_ci    | ucs2    | 135 | | Yes      |       8 || ucs2_swedish_ci    | ucs2    | 136 | | Yes      |       8 || ucs2_turkish_ci    | ucs2    | 137 | | Yes      |       8 || ucs2_czech_ci      | ucs2    | 138 | | Yes      |       8 || ucs2_danish_ci     | ucs2    | 139 | | Yes      |       8 || ucs2_lithuanian_ci | ucs2    | 140 | | Yes      |       8 || ucs2_slovak_ci     | ucs2    | 141 | | Yes      |       8 || ucs2_spanish2_ci   | ucs2    | 142 | | Yes      |       8 || ucs2_roman_ci      | ucs2    | 143 | | Yes      |       8 || ucs2_persian_ci    | ucs2    | 144 | | Yes      |       8 || ucs2_esperanto_ci  | ucs2    | 145 | | Yes      |       8 |+--------------------+---------+-----+---------+----------+---------+
  • utf8 (UTF-8 Unicode)校对规则:

    mysql> SHOW COLLATION LIKE 'utf8%';+--------------------+---------+-----+---------+----------+---------+| Collation  | Charset | Id  | Default | Compiled | Sortlen |+--------------------+---------+-----+---------+----------+---------+| utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 || utf8_bin   | utf8    |  83 | | Yes      |       1 || utf8_unicode_ci    | utf8    | 192 | | Yes      |       8 || utf8_icelandic_ci  | utf8    | 193 | | Yes      |       8 || utf8_latvian_ci    | utf8    | 194 | | Yes      |       8 || utf8_romanian_ci   | utf8    | 195 | | Yes      |       8 || utf8_slovenian_ci  | utf8    | 196 | | Yes      |       8 || utf8_polish_ci     | utf8    | 197 | | Yes      |       8 || utf8_estonian_ci   | utf8    | 198 | | Yes      |       8 || utf8_spanish_ci    | utf8    | 199 | | Yes      |       8 || utf8_swedish_ci    | utf8    | 200 | | Yes      |       8 || utf8_turkish_ci    | utf8    | 201 | | Yes      |       8 || utf8_czech_ci      | utf8    | 202 | | Yes      |       8 || utf8_danish_ci     | utf8    | 203 | | Yes      |       8 || utf8_lithuanian_ci | utf8    | 204 | | Yes      |       8 || utf8_slovak_ci     | utf8    | 205 | | Yes      |       8 || utf8_spanish2_ci   | utf8    | 206 | | Yes      |       8 || utf8_roman_ci      | utf8    | 207 | | Yes      |       8 || utf8_persian_ci    | utf8    | 208 | | Yes      |       8 || utf8_esperanto_ci  | utf8    | 209 | | Yes      |       8 |+--------------------+---------+-----+---------+----------+---------+

utf8_unicode_ci校对规则是根据Unicode校对规则算法(UCA)执行的,校对规则描述见 http://www.unicode.org/reports/tr10/。此校对规则使用UCA 4.0.0版本砝码键:http://www.unicode.org/Public/UC一个/4.0.0/一个llkeys-4.0.0.txt。(以下讨论使用utf8_unicode_ci,但同样适合ucs2_unicode_ci。)

当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt、Tatar、Bashkir和Mari。

utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。

utf8_general_ci是一个遗留的校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的校对规则相比,比较正确性较差)。

例如,使用utf8_general_ci和utf8_unicode_ci两种校对规则下面的比较相等:

Ä = A
Ö = O
Ü = U

两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:

ß = s

但是,对于utf8_unicode_ci下面等式成立:

ß = ss

对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。

utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

utf8_swedish_ci,与其它语言相关的utf8的校对规则相似,来源于utf8_unicode_ci,使用额外的语言规则。例如,在瑞典语中,以下的关系式成立,它在德语和法语中不成立:

Ü = Y < Ö

utf8_spanish_ci和utf8_spanish2_ci校对规则分别适用于现代和古典西班牙语。在两种校对规则中,ñ’(n-发音符)是‘n’和‘o’之间的间隔字母。另外,对于古典西班牙语,‘ch’是‘c’和d之间的间隔字母,并且‘ll’是‘l’和‘m’之间的间隔字母。

10.10.2. 西欧字符集

西欧字符集覆盖大多数西欧语言,如法语、西班牙语、加泰罗尼亚语、巴斯克人语、葡萄牙语、意大利语、阿而巴尼亚语、荷兰语、德语、丹麦语、瑞典语、挪威语、芬兰语、法罗人语、冰岛语、爱尔兰语、苏格兰语和英语。

·ascii(US ASCII)校对规则:

oascii_bin

oascii_general_ci(默认)

·cp850(DOS西欧)校对规则:

ocp850_bin

ocp850_general_ci(默认)

·dec8(DEC西欧)校对规则:

odec8_bin

odec8_swedish_ci(默认)

·hp8(HP西欧)校对规则:

ohp8_bin

ohp8_english_ci(默认)

·latin1(cp1252西欧)校对规则:

olatin1_bin

olatin1_danish_ci

olatin1_general_ci

olatin1_general_cs

olatin1_german1_ci

olatin1_german2_ci

olatin1_spanish_ci

olatin1_swedish_ci(默认)

latin1是默认字符集。latin1_swedish_ci是默认的校对规则,它用于大多数MySQL客户。虽然经常说它以瑞典/芬兰校对规则为基础,但瑞典和芬兰人不同意这种说法。

latin1_german1_ci和latin1_german2_ci校对规则基于DIN-1和DIN-2标准,这里DIN代表Deutsches Institut für Normung(德语等价于ANSI)。DIN-1被叫做“字典校对规则”,DIN-2被叫做“电话簿校对规则”。

olatin1_german1_ci(字典)规则:

o     Ä = a
o     Ö = O
o     Ü = U
o     ß = s

olatin1_german2_ci(电话簿)规则:

o     Ä = aE
o     Ö = OE
o     Ü = UE
o     ß = ss

在 latin1_spanish_ci校对规则中,‘ñ’(n-tilde)是‘n’和‘o’之间的间隔字母。

·macroma(Mac西欧)校对规则:

omacroman_bin

omacroman_general_ci(默认)

·swe7(7位瑞典语)校对规则:

oswe7_bin

oswe7_swedish_ci(默认)

10.10.3. 中欧字符集

我们还提供一些用于捷克共和国、斯洛伐克、匈牙利、罗马尼亚、斯罗纹尼亚、克罗地亚和波兰的字符集支持。

·cp1250(Windows中欧)校对规则:

ocp1250_bin

ocp1250_croatian_ci

ocp1250_czech_cs

ocp1250_general_ci(默认)

·cp852(DOS中欧)校对规则:

ocp852_bin

ocp852_general_ci(默认)

·keybcs2(DOS Kamenicky Czech-Slovak)校对规则:

okeybcs2_bin

okeybcs2_general_ci(默认)

·latin2(ISO 8859-2 中欧)校对规则:

olatin2_bin

olatin2_croatian_ci

olatin2_czech_cs

olatin2_general_ci(默认)

olatin2_hungarian_ci

·macce(Mac中欧)校对规则:

omacce_bin

omacce_general_ci(默认)

10.10.4. 南欧与中东字符集

MySQL支持的南欧和中东字符集包括亚美尼亚语、阿拉伯语、乔治亚语、希腊语、希伯莱语和土耳其语:

·armscii8(ARMSCII-8亚美尼亚语)校对规则:

oarmscii8_bin

oarmscii8_general_ci(默认)

·cp1256(阿拉伯语Windows)校对规则:

ocp1256_bin

ocp1256_general_ci(默认)

·geostd8(GEOSTD8乔治亚语)校对规则:

ogeostd8_bin

ogeostd8_general_ci(默认)

·greek(ISO 8859-7希腊语)校对规则:

ogreek_bin

ogreek_general_ci(默认)

·hebrew(ISO 8859-8希伯莱语)校对规则:

ohebrew_bin

ohebrew_general_ci(默认)

·latin5(ISO 8859-9 土耳其语)校对规则:

olatin5_bin

olatin5_turkish_ci(默认)

10.10.5. 波罗的海字符集

波罗的海字符集覆盖爱沙尼亚语、拉脱维亚语和立陶宛语言。当前支持的两种波罗的海字符集:

·cp1257(Windows波罗的海)校对规则:

ocp1257_bin

ocp1257_general_ci(默认)

ocp1257_lithuanian_ci

·latin7(ISO 8859-13波罗的海)校对规则:

olatin7_bin

olatin7_estonian_cs

olatin7_general_ci(默认)

olatin7_general_cs

10.10.6. 西里尔字符集

使用西里尔字符集和校对规则的有Belarusian、保加利亚、俄语和乌克兰语言。

·cp1251(Windows西里尔)校对规则:

ocp1251_bin

ocp1251_bulgarian_ci

ocp1251_general_ci(默认)

ocp1251_general_cs

ocp1251_ukrainian_ci

·cp866(DOS俄语)校对规则:

ocp866_bin

ocp866_general_ci(默认)

·koi8r(KOI8-R Relcom 俄语)校对规则:

okoi8r_bin

okoi8r_general_ci(默认)

·koi8u(KOI8-U乌克兰语)校对规则:

okoi8u_bin

okoi8u_general_ci(默认)

10.10.7. 亚洲字符集

10.10.7.1. cp932字符集

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

·big5(Big5传统中文)校对规则:

obig5_bin

obig5_chinese_ci(默认)

·cp932(SJIS Windows日语)校对规则:

ocp932_bin

ocp932_japanese_ci(默认)

·eucjpms(UJIS Windows日语)校对规则:

oeucjpms_bin

oeucjpms_japanese_ci(默认)

·euckr(EUC-KR韩语)校对规则:

oeuckr_bin

oeuckr_korean_ci(默认)

·gb2312(GB2312简体中文)校对规则:

ogb2312_bin

ogb2312_chinese_ci(默认)

·gbk(GBK简体中文)校对规则:

ogbk_bin

ogbk_chinese_ci(默认)

·sjis(Shift-JIS日语)校对规则:

osjis_bin

osjis_japanese_ci(默认)

·tis620(TIS620泰国语)校对规则:

otis620_bin

otis620_thai_ci(默认)

·ujis(EUC-JP日语)校对规则:

oujis_bin

oujis_japanese_ci(默认)

10.10.7.1. cp932字符集

为什么需要cp932

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

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

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

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

·MySQL自动转换字符集。

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

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

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

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

因为MySQL支持字符集转换,将IANAShift_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表中的带有下面有四位数字出现的字符的实体,数字代表相应的Unicode(ucs2)编码。对于表中有两个带下划线的数字出现的实体,择有一个以那两个数字开头的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

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

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

转换到ucs2:

sjis/cp932

sjisucs2转换

cp932ucs2转换

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

ucs2sjis转换

ucs2cp932转换

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

这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。 原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。