MySQL 字符集

环境说明

MySQL8.0.16 image.png


下面来认识一下 MySQL 字符集,简单来说字符集就是一套文字符号和编码、比较规则的集合。1960 年美国标准化组织 ANSI 发布了第一个计算机字符集,就是著名的 ASCII(American Standard Code for Information Interchange) 。自从 ASCII 编码后,每个国家、国际组织都研究了一套自己的字符集,比如 ISO-8859-1GBK 等。
但是每个国家都使用自己的字符集为移植性带来了很大的困难。所以,为了统一字符编码,国际标准化组织(ISO) 指定了统一的字符标准 - Unicode 编码,它容纳了几乎所有的字符编码。下面是一些常见的字符编码

字符集 是否定长 编码方式
ASCII 单字节 7 位编码
ISO-8859-1 单字节 8 位编码
GBK 双字节编码
UTF-8 1 - 4 字节编码
UTF-16 2 字节或 4 字节编码
UTF-32 4 字节编码

对数据库来说,字符集是很重要的,因为数据库存储的数据大多数都是各种文字,字符集对数据库的存储、性能、系统的移植来说都非常重要。
MySQL 支持多种字符集,可以使用 show character set; 来查看所有可用的字符集

  1. mysql> show character set;
  2. +----------+---------------------------------+---------------------+--------+
  3. | Charset | Description | Default collation | Maxlen |
  4. +----------+---------------------------------+---------------------+--------+
  5. | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
  6. | ascii | US ASCII | ascii_general_ci | 1 |
  7. | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
  8. | binary | Binary pseudo charset | binary | 1 |
  9. | cp1250 | Windows Central European | cp1250_general_ci | 1 |
  10. | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
  11. | cp1256 | Windows Arabic | cp1256_general_ci | 1 |
  12. | cp1257 | Windows Baltic | cp1257_general_ci | 1 |
  13. | cp850 | DOS West European | cp850_general_ci | 1 |
  14. | cp852 | DOS Central European | cp852_general_ci | 1 |
  15. | cp866 | DOS Russian | cp866_general_ci | 1 |
  16. | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
  17. | dec8 | DEC West European | dec8_swedish_ci | 1 |
  18. | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
  19. | euckr | EUC-KR Korean | euckr_korean_ci | 2 |
  20. | gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
  21. | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
  22. | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
  23. | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
  24. | greek | ISO 8859-7 Greek | greek_general_ci | 1 |
  25. | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
  26. | hp8 | HP West European | hp8_english_ci | 1 |
  27. | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
  28. | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
  29. | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
  30. | latin1 | cp1252 West European | latin1_swedish_ci | 1 |
  31. | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
  32. | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
  33. | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
  34. | macce | Mac Central European | macce_general_ci | 1 |
  35. | macroman | Mac West European | macroman_general_ci | 1 |
  36. | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
  37. | swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
  38. | tis620 | TIS620 Thai | tis620_thai_ci | 1 |
  39. | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
  40. | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
  41. | utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
  42. | utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
  43. | utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
  44. | utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
  45. | utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |
  46. +----------+---------------------------------+---------------------+--------+
  47. 41 rows in set (0.00 sec)

image.png
或者使用

  1. mysql> select character_set_name, default_collate_name, description, maxlen from information_schema.character_sets;
  2. +--------------------+----------------------+---------------------------------+--------+
  3. | CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION | MAXLEN |
  4. +--------------------+----------------------+---------------------------------+--------+
  5. | big5 | big5_chinese_ci | Big5 Traditional Chinese | 2 |
  6. | dec8 | dec8_swedish_ci | DEC West European | 1 |
  7. | cp850 | cp850_general_ci | DOS West European | 1 |
  8. | hp8 | hp8_english_ci | HP West European | 1 |
  9. | koi8r | koi8r_general_ci | KOI8-R Relcom Russian | 1 |
  10. | latin1 | latin1_swedish_ci | cp1252 West European | 1 |
  11. | latin2 | latin2_general_ci | ISO 8859-2 Central European | 1 |
  12. | swe7 | swe7_swedish_ci | 7bit Swedish | 1 |
  13. | ascii | ascii_general_ci | US ASCII | 1 |
  14. | ujis | ujis_japanese_ci | EUC-JP Japanese | 3 |
  15. | sjis | sjis_japanese_ci | Shift-JIS Japanese | 2 |
  16. | hebrew | hebrew_general_ci | ISO 8859-8 Hebrew | 1 |
  17. | tis620 | tis620_thai_ci | TIS620 Thai | 1 |
  18. | euckr | euckr_korean_ci | EUC-KR Korean | 2 |
  19. | koi8u | koi8u_general_ci | KOI8-U Ukrainian | 1 |
  20. | gb2312 | gb2312_chinese_ci | GB2312 Simplified Chinese | 2 |
  21. | greek | greek_general_ci | ISO 8859-7 Greek | 1 |
  22. | cp1250 | cp1250_general_ci | Windows Central European | 1 |
  23. | gbk | gbk_chinese_ci | GBK Simplified Chinese | 2 |
  24. | latin5 | latin5_turkish_ci | ISO 8859-9 Turkish | 1 |
  25. | armscii8 | armscii8_general_ci | ARMSCII-8 Armenian | 1 |
  26. | utf8 | utf8_general_ci | UTF-8 Unicode | 3 |
  27. | ucs2 | ucs2_general_ci | UCS-2 Unicode | 2 |
  28. | cp866 | cp866_general_ci | DOS Russian | 1 |
  29. | keybcs2 | keybcs2_general_ci | DOS Kamenicky Czech-Slovak | 1 |
  30. | macce | macce_general_ci | Mac Central European | 1 |
  31. | macroman | macroman_general_ci | Mac West European | 1 |
  32. | cp852 | cp852_general_ci | DOS Central European | 1 |
  33. | latin7 | latin7_general_ci | ISO 8859-13 Baltic | 1 |
  34. | cp1251 | cp1251_general_ci | Windows Cyrillic | 1 |
  35. | utf16 | utf16_general_ci | UTF-16 Unicode | 4 |
  36. | utf16le | utf16le_general_ci | UTF-16LE Unicode | 4 |
  37. | cp1256 | cp1256_general_ci | Windows Arabic | 1 |
  38. | cp1257 | cp1257_general_ci | Windows Baltic | 1 |
  39. | utf32 | utf32_general_ci | UTF-32 Unicode | 4 |
  40. | binary | binary | Binary pseudo charset | 1 |
  41. | geostd8 | geostd8_general_ci | GEOSTD8 Georgian | 1 |
  42. | cp932 | cp932_japanese_ci | SJIS for Windows Japanese | 2 |
  43. | eucjpms | eucjpms_japanese_ci | UJIS for Windows Japanese | 3 |
  44. | gb18030 | gb18030_chinese_ci | China National Standard GB18030 | 4 |
  45. | utf8mb4 | utf8mb4_0900_ai_ci | UTF-8 Unicode | 4 |
  46. +--------------------+----------------------+---------------------------------+--------+
  47. 41 rows in set (0.00 sec)

image.png
来查看。
使用 information_schema.character_set 来查看字符集和校对规则。

  1. mysql> desc information_schema.character_sets;
  2. +----------------------+------------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +----------------------+------------------+------+-----+---------+-------+
  5. | CHARACTER_SET_NAME | varchar(64) | NO | | NULL | |
  6. | DEFAULT_COLLATE_NAME | varchar(64) | NO | | NULL | |
  7. | DESCRIPTION | varchar(2048) | NO | | NULL | |
  8. | MAXLEN | int(10) unsigned | NO | | NULL | |
  9. +----------------------+------------------+------+-----+---------+-------+
  10. 4 rows in set (0.00 sec)

image.png