最近在学习Kubenetes,把Nginx,PHP,MySQL都以集群的方式部署到了Kubenetes下。
部署完成之后,找了个FastAdmin的项目来测试下有没有什么问题。
其它问题就不说了,主要是中文乱码的问题。
这套代码在别的地方都是没问题的,所以程序上的问题,包括页面编码的问题都可以排除。
只要不涉及数据库的地方,中文都是正常显示,直接在控制器中echo
或var_dump
中文都是正常的,这说明操作系统对中文的支持基本是完备的,问题应该出在MySQL存储的字符集或数据库连接的字符问题上。
由于创建数据库时直接指定了utf8bm4
编码,所以数据库存储本身的问题不大,保险起见还是检查下。从mysql
命令行进入数据库,直接查询数据,中文正常显示,看来也不是MySQL存储的字符集问题,那么问题就很明显了,出在数据库连接上。
在PHP中显式的调用set names utf8
也不起作用,只能修改MySQL配置了。
依旧在mysql
命令行里执行操作,show variables '%char%';
,出来好几个,基本都是latin1
,只有一个是utf8
,问题果然出在这!
找到MySQL的配置文件,在[mysqld]
里添加上
character-set-server=utf8
另外再加上
[client]
default-character-set=utf8
对于普通的MySQL服务器,直接重启就好了,由于我用的是Kubenetes部署的,MySQL配置写在了ConfigMap中,好在也没什么生产性的数据,所以直接推倒重来了,问题解决!