mysql客户端中文乱码

今天遇到一个字符集的问题,大致记录一下处理过程

从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博客 ” ,链接:http://blog.itpub.net/30150152/viewspace-1795668/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30150152/viewspace-1795668/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值