版权声明:转载请附上文章地址 https://blog.csdn.net/weixin_38134491/article/details/86758370
客户端和服务器之间交互的字符集叫连接字符集设置
对于客户端和服务器端交互MySQL提供了三个参数:
- character_set_client: 客户端来源数据使用的字符集
通过这个参数客户端把自己用的是什么字符集告诉服务器端
- character_set_connection: 连接层字符集
连接层是在服务器端,连接层接收到来自客户端的字符集会判断类型是否和自己一致,不一致就转换类型,
然后再到MySQL服务器内部,内部再分为服务器字符集、数据库字符集....
- character_set_results: 返回结果字符集
通过这个参数服务器端根据客户端请求的字符集返回相应的字符集结果给客户端
数据在客户端和服务器之间交互的过程中字符集转换的过程
- MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connectin
- 进行内部操作前将请求数据从character_set_connection转换成内部操作字符集
- 将操作结果从内部操作字符集转换为character_set_results
这三个参数设定的字符集应该相同,set names 可以同时把三个参数设置成同一种编码格式,仅对本次有效
查看当前设置的方法: show variables like 'character_set%';
MySQL连接字符集设置
客户端应该把自己本地真实的编码格式告诉服务器端,而不能告诉服务器端假的编码格式,
比如,客户端是GBK格式,服务器连接层也是GBK格式,服务器内部是utf8格式,
那么现在服务器连接层接收到客户端的信息后就不用转换了,但到了内部需要转换成utf8格式,
服务器内部再返回信息给客户端的时候需要再从utf8格式转换成gbk格式
gb2312编码没有gbk存的语言格式多,比如gb2312存不了繁体
用cmd命令行修改字符集(以下是cmd命令不是SQL语句):
chcp 65001 :换成utf-8代码页(设置为utf8之后最好手动修改显示字体)
chcp 936 :换成默认的gbk
总结:客户端使用的字符集、连接层使用的字符集、服务器内部使用的字符集、返回使用的字符集最好设置成一样的