一般在服务器上刚安装的mysql的编码方式不支持中文,中文会乱码,数据库中的中文会显示“???”,这种情况是mysql的编码方式不统一,也有可能是其他问题,下面讲述排查步骤。
进入mysql命令行,查看mysql的编码方式
mysql -u root -p查看MySQL的编码方式
show variables like '%char%'
修改/etc/my.cnf文件
vi /etc/my.cnf添加如下数据:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
修改完以后重启
/etc/init.d/mysql restart此时注意重启是否异常提示,如果没有报异常,进入mysql查看编码格式
show variables like '%char%'重启后在插入一遍数据,已经支持中文了。
如果重启异常,先进入mysql查看编码格式已经修改完毕,如果修改完毕,这修改成功,如果没有修改成功,查看异常信息,一般情况异常较多一下问题:
Warning: World-writable config file '/etc/my.cnf' is ignored造成上述错误的原因是"/etc/my.cnf"权限777,任何一个用户都可以改my.cnf,存在很大的安全隐患。所以系统会忽略该配置文件,使用默认配置,导致"/etc/my.cnf"中的配置被忽略。
修改"/etc/my.cnf"权限为644:
chmod 644 /etc/my.cnf然后重启mysql
/etc/init.d/mysql restart如果没有报错,进入mysql查看编码格式。如果报错,提示的是文件不存在,而存在的文件都是"/etc/my.cnf"中配置的文件路径,很有可能是mysql在安装的时候就没有读取配置文件信息。需要重新进行初始化
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql其中basedir和datadir的地址为"/etc/my.cnf"中的地址,如下图,根据自己的地址进行修改:
此处需要注意记录生成的临时密码,如下图结尾处的:arVVMIwjr6/A
安装mysql
bin/mysql_ssl_rsa_setup --datadir=/data/mysql然后进入mysql,配置用户名密码,开启远程服务等操作,然后启动mysql
/etc/init.d/mysql start启动成功后,可以进入mysql查看编码格式,会发现已修改为utf8.