ITPub博客

首页 > 数据库 > MySQL > mysql客户端中文乱码

mysql客户端中文乱码

原创 MySQL 作者:warren20 时间:2015-09-09 18:24:58 0 删除 编辑
今天遇到一个字符集的问题,大致记录一下处理过程

从A机器登陆到服务器查看字符集
  1. mysql> show variables like '%char%';
  2. +------------------------------+----------------------------------+
  3. | Variable_name                | Value |
  4. +------------------------------+----------------------------------+
  5. | character_set_client         | utf8 |
  6. | character_set_connection     | utf8 |
  7. | character_set_database       | utf8 |
  8. | character_set_filesystem     | binary |
  9. | character_set_results        | utf8 |
  10. | character_set_server         | utf8 |
  11. | character_set_system         | utf8 |
  12. | character_sets_dir           | /usr/local/mysql/share/charsets/ |
从B机器登陆到服务器查看字符集
  1. mysql> show variables like '%char%';
  2. +-----------------------------+----------------------------------+
  3. | Variable_name               | Value |
  4. +-----------------------------+----------------------------------+
  5. | character_set_client        | latin1 |
  6. | character_set_connection    | latin1 |
  7. | character_set_database      | utf8 |
  8. | character_set_filesystem    | binary |
  9. | character_set_results       | latin1 |
  10. | character_set_server        | utf8 |
  11. | character_set_system        | utf8 |
  12. | character_sets_dir          | /usr/local/mysql/share/charsets/ |
  13. +--------------------------+----------------------------------+
在A和B机器上执行同一条SQL, A机器中文正常, B机器中文出现乱码,这个跟客户端的字符集有关系, 在/etc/my.cnf 增加  default-character-set=utf8
  1. [root@phzc_pa_uat_007 ~]# vi /etc/my.cnf

  2. # The following options will be passed to all MySQL clients
  3. [client]
  4. #password = your_password
  5. port = 1333
  6. socket = /tmp/mysql.sock
  7. default-character-set=utf8
  8. # Here follows entries for some specific programs
修改这个参数后,需要重启Mysql, 但是我们的mysql不能重启

后来在网上找到一个解决方法:
1)设置 init_connect动态变量,set global init_connect="SET NAMES utf8", 同时在my.cnf中的[mysqld]下添加上init_connect='SET NAMES utf8'

2)由于init_connect的设置对于有SUPPER权限的用户,如root@127.0.0.1等不起作用,所以在my.cnf中的[mysql]或[client]下default-character-set =utf8.
说明:第一种针对所有非SUPPER权限用户,包括你应用程序连接。 2)中的设置中针对本机连接,处于/etc/my.cnf文件。


解决:
在服务器上执行脚本:
mysql> set global init_connect="SET NAMES utf8";
B机器就正常了;

补充:
init_connect:
在MYSQL中,每个连接都会先执行init-connect,进行连接的初始化。我们可以在这里获取用户的登录名称和thread的ID值。然后配合binlog,就可以追踪到每个操作语句的操作时间,操作人等。实现审计。

init_connect对具有super权限的用户不起作用

init_connect 参考网址:http://blog.sina.com.cn/s/blog_605f5b4f01013xkv.html


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30150152/viewspace-1795668/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-03-03

  • 博文量
    56
  • 访问量
    376702