问题背景
用户反馈,在使用ob_mysql的场景下,前端页面、日志都出现中文展示为乱码
复现问题
排查过程
- 通过mysql命令行连接到mysql后通过设置编码格式,执行简单查询语句
验证结论:
如果使用set names gbk能命令行查询显示中文正常。猜测很可能是因为连接的客户端没有执行“set names gbk”语句,或者设置的值不对
- 检测客户端链接的实现,可以看到,客户端使用mysql_options的MYSQL_READ_DEFAULT_FILE(读配置文件)的方式链接mysql
- 验证my.cnf中的配置
验证结论:my.cnf配置正确
猜测:mysql_options的MYSQL_READ_DEFAULT_FILE的没有实现或者实现有问题?
- 使用MYSQL_INIT_COMMAND命令执行"set names gbk"
5.再次验证,发现界面查询的中文已经显示正常
结论
- 直接原因:mysql客户端链接没有执行set names gbk导致中文乱码
- 根本原因:ob_mysq环境下,mysql_options的MYSQL_READ_DEFAULT_FILE读配置文件方式设置编码不生效。
- 解决方案:使用MYSQL_INIT_COMMAND,替换mysql_options的MYSQL_READ_DEFAULT_FILE进行编码的设置。