用的是腾讯云的Mysql数据库,为了设置客户端字符集,使用了在网上找到的方法,
set character_set_client= utf8;
set character_set_connection =utf8 ;
set character_set_results=utf8 ;
不生效。直接在后台配置character_set_client_handshake置为OFF,完美解决
下面是遇到的问题
问题:
在一次升级数据库后 查询log时,出现乱码
navicat for mysql 的版本时10.0.9,11以上的版本没有使用MySql字符集的选项
没有勾选的时候库里看着没有乱码
命令行 运行show variables like'char%';
勾选的时候库里是乱码的
说明数据在存的时候 存的是latin1
怎么设置存的时候utf8格式?
我们先来了解一下mysql这些变量的作用
这三个变量我们不需要关系,不会影响乱码等问题
- character_set_filesystem
- character_set_system
- character_sets_dir
我们只关注下列变量是否符合我们的要求
- character_set_client 主要用来设置客户端使用的字符集。
- character_set_connection 主要用来设置连接数据库时的字符集
- character_set_database 主要用来设置默认创建数据库的编码格式
- character_set_results 数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。
- character_set_server 服务的端使用的字符集。
主要修改这三个参数
set character_set_client= utf8;
set character_set_connection =utf8 ;
set character_set_results=utf8 ;
但是改完之后没什么用(临时生效,只要一重启mysql服务就会失效)
经过查找配置文件,发现了这个character_set_client_handshake(没有深入研究,自己理解的意思是 如果关的话,就是使用服务的的字符集)
特别坑的一点是在后台配置完不管是开还是关,导出的my.cnf中的值都是空
这个值默认是ON,我们设置成OFF就ok了
最后修改完自动重启mysql,再运行show variables like'char%';
测试重新插入数据,就全部是utf8格式的了