上篇文章介绍了mysql字符集查询sql从字符串到字节串编码解码的转换,及其如何返回给客户端:
了解字符集我们可以解决的问题?
当用sql查询出来的结果乱码,可能因为字符集转换导致的。
当我们排序时候未获取想要的结果,可能因为字符集比较规则导致的。
总结:
字符集:指某个字符范围的编码规则。
比较规则:针对某个字符集中字符大小比较的一种规则。
Mysql中:一个字符集有若干个比较规则,其中有个默认的比较规则,一个字符集必须对应一个比较规则。查询方法,show variables like ‘character_set_resluts’;
Mysql主要有四个字符集级别,服务器级别,数据库级别,表级别,列级别,若低级别的没有设置字符集,则会自动继承高级别的字符集,比如列如果没有设置自己特定的字符集,则会默认继承表级别的字符集。
Mysql服务器从接受客户端请求到返回请求给客户端,字节串编码解码如何进行转换,有三个重要的系统参数,character_set_client,处理客户端发送过来的字节串,注意这里是字节串,客户端会把字符串转成字节串发送过来。还有character_Set_connection,处理发过来的语句,并且解析返回给客户端的字节串,最后还有character_Set_Results解析字节串返回给客户端。一般情况下,都会用set names ‘’,保证这三个参数的字符集一致,防止不必要的转换消耗性能。
比较规则也可以保证大小写排序不能正常显示等。