MySQL中的字符集与字符序

2022-08-27 18:30:02 浏览数 (1)

这篇文章详细介绍一下MySQL中的字符集和字符序相关的问题,里里外外地了解一下字符集和字符序的方方面面,同时重点说明一下开发中需要注意的问题。

文章基于MySQL 8.0,也会涉及到5.7版本。主要参考MySQL手册:https://dev.mysql.com/doc/refman/8.0/en/

1. 太长不爱看版

  • 字符集(Character Set)是字符的编码规则,字符序(Collation)是字符的排序规则;
  • 每一个字符集都包含一定范围的字符;
  • 每一个字符集都有一个或多个字符序,其中一个字符序为默认字符序;
  • 每一个字符序都有一个相关联的字符集;
  • 两个不同的字符集没有相同的字符序;
  • 相同数据使用不同的字符序排序结果可能会不同;
  • MySQL支持服务(server)、数据库(database)、表(table)、字段(column)以及字符串字面量(string literal)等多个级别的字符集与字符序的设置;
  • 库表创建以及程序中尽可能使用utf8mb4字符集(可支持emoji);
  • MySQL中的utf8字符集是utf8mb3字符集的别名,避免使用;
  • MySQL 5.7的服务默认字符集是latin1,而8.0中是utf8mb4
  • 通过SHOW CHARACTER SET查看当前服务器所支持的字符集;
  • 通过SHOW COLLATION查看所有的字符序;
  • MySQL中有多个关于字符集和字符序的系统变量,可以针对全局以及当前session进行设置;
  • 通过SHOW VARIABLES LIKE "character_set%"查看当前服务以及数据库的字符集设置;
  • 使用client客户端连接数据库时,如果编码有问题,可以通过SET NAMES charset_name来设置和数据库一致的字符集;
  • 库表内容在不同字符集之前转换可能会发生数据丢失问题。

2. 什么是字符集与字符序

在大多数情况下,我们并不需要了解字符集与字符序,但是在涉及到不同字符集的转换时可能会出现问题,这时了解一下相关的知识还是有帮助的。

我们首先了解一下字符集的原理。

2.1 字符与字符集

字符是我们经常接触到的东西,比如a、中、ß,以及

0 人点赞