GBK字符集集群show processlist中文乱码

集群的字符集设置为gbkxshell 的字符集设置为GBK
gbase> show variables like '%char%';
+----------------------------+--------------------------------------------+
| Variable_name              | Value                                      |
+----------------------------+--------------------------------------------+
| character_set_client       | gbk                                        |
| character_set_connection   | gbk                                        |
| character_set_database     | gbk                                        |
| character_set_filesystem   | binary                                     |
| character_set_results      | gbk                                        |
| character_set_server       | gbk                                        |
| character_set_sort         | binary                                     |
| character_set_system       | utf8                                       |
| character_sets_dir         | /opt/gcluster/server/share/gbase/charsets/ |
| gbase_loader_check_charset | OFF                                        |
+----------------------------+--------------------------------------------+
[gbase@PSTFILE ~]$ echo $LANG
zh_CN.GB2312
gbase> select sleep(10), '电风扇' from dual;   
+-----------+--------+
| sleep(10) | 电风扇 |
+-----------+--------+
|         0 | 电风扇 |
+-----------+--------+
gbase> show processlist;
+----+-----------------+-----------------+------+---------+------+-----------------------------+--------------------------------------+
| Id | User            | Host            | db   | Command | Time | State                       | Info                                 |
+----+-----------------+-----------------+------+---------+------+-----------------------------+--------------------------------------+
|  1 | event_scheduler | localhost       | NULL | Daemon  | 5375 | Waiting for next activation | NULL                                 |
| 14 | root            | 127.0.0.1:58522 | NULL | Query   |    0 | NULL                        | show processlist                     |
| 16 | root            | 127.0.0.1:58533 | NULL | Query   |    5 | checking permissions        | select sleep(10), '??????' from dual |
+----+-----------------+-----------------+------+---------+------+-----------------------------+--------------------------------------+
show processlist显示sql中文乱码。


2 回答

系统字符集是确定不变的,为utf8,所有系统表(当然包括information_schema.processlist)都使用utf8编码,不受参数设置影响。而processlistinfo字段是来自于client端的,可能使用其他编码格式,如gbk。将其写入到processlist表中时,是对系统表操作,默认认为其编码格式为utf8,从而不做转换,引起上述问题。
2018-5-29 14:56
show processlist的脚本临时设置变量(session级):character_set_results=utf8,可以规避。强烈建议:该变量仅限于show processlist使用,不要设置后执行其他sql语句。
2018-5-29 14:56

撰写回答

您需要登录后才可以回帖 登录 | 立即注册

提问者

发布44
回答127

相关问题

相关资料