[TOC]

(linux + docker + mysql的话,可以无视以下)

(linux + docker + mysql的话,可以无视以下)

(linux + docker + mysql的话,可以无视以下)

一. win-mysql 查看并修改编码

SHOW VARIABLES LIKE 'char%' 查看编码

1
2
3
4
5
6
character_set_client      |  utf-8
character_set_connection | utf-8 -> mysql把我们客户端传递的数据都当成是utf8! 一是给它传递utf8, 二是如果我们传递的是gbk, 那么需要修改这个变量为gbk
character_set_database | utf-8mb4
character_set_results | utf-8 -> mysql发送给库换段的数据都是utf8的. 一是客户端用utf8编码, 二是如果客户端使用gbk来编码, 那么需要修改这个变量为gbk
character_set_server | utf-8mb4
character_set_system | utf-8

MySQL在5.5.3之后增加了这个utf8mb4的编码,
mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。
好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。
当然,为了节省空间,一般情况下使用utf8也就够了。

1 character_set_client=utf-8 ,无论客户端发送的是什么编码的数据, mysql都当成是utf8的数据

  • 若服务器发送的是GBK
  • 服务器会当成utf8对待
  • 总结: 必然乱码

处理问题的手段有两种:

  • 1 让客户端发送utf8的数据(行不通)(win7改不了,win10估计也改不了)
  • 2 把character_set_client修改为gbk --> 只在当前窗口内有效, 也就是说,关闭床口(小黑屏)后, 再打开, 又回到了utf8了.

2 character_set_results=utf8 , 把数据用什么编码发送给客户端!

  • 若服务发送给客户端的是utf8的数据
  • 客户端会把它当成gbk, 因为我们的小黑屏, 只能显示gbk
  • 总结: 必然乱码

处理问题的手段有两种:

  • 让服务器发送gbk的数据: character_set_results=gbk
  • 让小黑屏使用utf8来解读 (行不通)

3 my.ini

在总配置文件中进行配置, 可以一劳永逸
mysql/mysql server 5.5/my.ini/

1
2
3
4
[client]
port=3306
[mysql]
default-character_set=gbk /*它可以一劳永逸! 它可以修改三个变量: client、result、connection*/

然后cmd, 重启mysql, 让配置信息生效

1
2
net stop mysql
net start mysql

P.S. SQLlog 会自动设置 utf-8, 因为 SQLlog 里面打出来的就是utf-8

End. 来源: 阿里云大学/java/黑马程序员(https://edu.aliyun.com/lesson_1707_13774)