今天遇到一个字符集的问题,大致记录一下处理过程
从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/ |
从B机器登陆到服务器查看字符集
-
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/ |
-
+--------------------------+----------------------------------+
在A和B机器上执行同一条SQL, A机器中文正常, B机器中文出现乱码,这个跟客户端的字符集有关系, 在/etc/my.cnf 增加 default-character-set=utf8
-
[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
修改这个参数后,需要重启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/
,如需转载,请注明出处,否则将追究法律责任。