MySql设置客户端字符集

 

用的是腾讯云的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格式的了