Linux:mysql中文乱码解决方案

    科技2022-07-20  97

    一般在服务器上刚安装的mysql的编码方式不支持中文,中文会乱码,数据库中的中文会显示“???”,这种情况是mysql的编码方式不统一,也有可能是其他问题,下面讲述排查步骤。

    1.查看编码mysql格式

    进入mysql命令行,查看mysql的编码方式

    mysql -u root -p

    查看MySQL的编码方式

    show variables like '%char%'

     

     

    2.修改mysql的配置文件

    修改/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

     

     

    3.重启

    修改完以后重启

    /etc/init.d/mysql restart

    此时注意重启是否异常提示,如果没有报异常,进入mysql查看编码格式

    show variables like '%char%'

    重启后在插入一遍数据,已经支持中文了。

     

    4.其他异常处理

    如果重启异常,先进入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.

    Processed: 0.012, SQL: 8