今天遇到一个字符集的问题,大致记录一下处理过程
从A机器登陆到服务器查看字符集
从B机器登陆到服务器查看字符集
在A和B机器上执行同一条SQL, A机器中文正常, B机器中文出现乱码,这个跟客户端的字符集有关系, 在/etc/my.cnf 增加 default-character-set=utf8
修改这个参数后,需要重启Mysql, 但是我们的mysql不能重启
后来在网上找到一个解决方法:
解决:
在服务器上执行脚本:
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
从A机器登陆到服务器查看字符集
- mysql> show variables like '%char%';
- +------------------------------+----------------------------------+
- | Variable_name | Value |
- +------------------------------+----------------------------------+
- | character_set_client | utf8 |
- | character_set_connection | utf8 |
- | character_set_database | utf8 |
- | character_set_filesystem | binary |
- | character_set_results | utf8 |
- | character_set_server | utf8 |
- | character_set_system | utf8 |
- | character_sets_dir | /usr/local/mysql/share/charsets/ |
- mysql> show variables like '%char%';
- +-----------------------------+----------------------------------+
- | Variable_name | Value |
- +-----------------------------+----------------------------------+
- | character_set_client | latin1 |
- | character_set_connection | latin1 |
- | character_set_database | utf8 |
- | character_set_filesystem | binary |
- | character_set_results | latin1 |
- | character_set_server | utf8 |
- | character_set_system | utf8 |
- | character_sets_dir | /usr/local/mysql/share/charsets/ |
- +--------------------------+----------------------------------+
- [root@phzc_pa_uat_007 ~]# vi /etc/my.cnf
-
- # The following options will be passed to all MySQL clients
- [client]
- #password = your_password
- port = 1333
- socket = /tmp/mysql.sock
- default-character-set=utf8
- # Here follows entries for some specific programs
后来在网上找到一个解决方法:
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/