mysql中文乱码或者中文报错

   当出现中文乱码或者执行包含中文的语句报错时,十有八九就是编码的问题,我们可以执行下面语句查看编码:  

  SHOW VARIABLES LIKE '%char%'

  显示

  

    其中character_set_server是服务器编码:latin1,这个也是mysql默认的编码,我们可以使用set命令修改这个编码:  

  SET character_set_server = utf8;

  但是这个set修改是临时的,如果mysql重启之后,这个编码会重新设置成默认编码latin1

   所以我们最好是去修改配置文件中的默认编码:

  先进入mysql的主目录,在目录下会有个my.cnf文件,打开查看里面有没有mysqld节点配置,我这里是没有的,里面是:  

  !includedir /etc/mysql/conf.d/
  !includedir /etc/mysql/mysql.conf.d/

  想必这两个指的是mysql配置文件的目录,然后分别进入这两个目录,发现/etc/mysql/mysql.conf.d/目录下的mysqld.cnf文件里有mysqld节点配置,然后将上面配置加上(存在则修改)即可:

  

   如果都没有找到mysqld节点,那直接在my.cnf中加上mysqld节点,再将上面的配置加上(存在则修改)即可

   修改完成需要重启下mysql服务:service mysql restart

  注意,这里修改之后,只对重新创建的表才能生效,对于已经存在的表,我们修改手动修改它的编码:  

  -- utf8_general_ci表示utf8编码,latin1_swedish_ci表示latin1编码,是默认编码
  -- 查看表编码
  SELECT TABLE_COLLATION FROM information_schema.`TABLES` WHERE TABLE_NAME='table_name';
  -- 查看列编码
  SELECT COLLATION_NAME FROM information_schema.`COLUMNS` WHERE TABLE_NAME='table_name' AND COLUMN_NAME='column_name';

  -- 修改表编码   ALTER TABLE [表名] CONVERT TO CHARACTER SET utf8;   -- 修改列编码   ALTER TABLE [表名] MODIFY [列名] [类型] CHARACTER SET utf8;

  另外,如果修改了mysql的服务器的字符编码为utf8,但是还是现实中文乱码,那么可能是客户端编码问题,执行 SHOW VARIABLES LIKE '%char%' 查看character_set_client参数是否是utf8,如果不是,则在配置文件中添加节点:  

  [client]
  default-character-set=utf8
原文地址:https://www.cnblogs.com/shanfeng1000/p/12269556.html