编码
一、概念
MySQL提供了不同级别的设置,包括server级、database级、table级、column级,可以提供非常精准的设置。
什么是字符集、字符序?简单的来说:
字符集(character set):定义了字符以及字符的编码。
字符序(collation):定义了字符的比较规则。
二、server的字符集、字符序
1、查看server字符集、字符序
2、database的字符集、字符序
创建数据库时,指定了
CHARACTER SET
或COLLATE
,则以对应的字符集、排序规则为准。创建数据库时,如果没有指定字符集、排序规则,则以
character_set_server
、collation_server
为准。
三、客户端字符编码
默认驱动程序自动使用服务器指定的编码
要覆盖客户端自动检测到的编码,请使用characterEncoding
服务器连接URL中的属性
characterEncoding 指定字符编码
characterSetResults 告诉服务器返回结果的字符集
1、当你配置了client的default_character_set之后,characterEncoding和characterSetResults这两个变量你设置与否都不重要了。
四、乱码问题
要统一字符集
SHOW VARIABLES LIKE 'collation_%';
a、要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致; b、要保证通讯的字符集与数据库的字符集一致,即character_set_client, character_set_connection与character_set_database一致; c、要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致;
- character_set_client:客户端请求数据的字符集
- character_set_connection:从客户端接收到数据,然后传输的字符集
- character_set_database:默认数据库的字符集;如果没有默认数据库,使用character_set_server字段
- character_set_results:结果集的字符集
- character_set_server:数据库服务器的默认字符集
五、参考链接
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-charsets.html
https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html
六、附录
Last updated