最近工作中遇到的问题,简单记录下。

问题的情形是这样的:

从本地 SSH 到服务器 A,在 A 上用 MySQL 客户端连接服务器 B 的 MySQL 数据库。但是在执行 SQL 语句时,发现无法在 MySQL 的 CLI 终端里输入中文。与之形成对比的是,在服务器 A 的普通终端窗口里,中文输入是完全正常的。

 

Google 了下,发现这是由于 OS 的 locale 与 MySQL server 端的字符编码不一致造成的。解决方法较为简单,将 OS 的 locale 与 MySQL server 端的字符编码设置成匹配即可:

  • 当 MySQL server 端的字符编码为 gbk 或者 gb2312 时,将 LANGLC_ALL 环境变量置为 en_US
  • 当 MySQL server 端的字符编码为 utf8 时,将 LANGLC_ALL 环境变量置为 en_US.UTF-8

在实际应用中,没有必要专门为了 MySQL 而去修改 OS 的环境变量。只需要在启动 MySQL client 时,指定 LANG 的环境变量即可:

$ LANG=en_US mysql -h hostname --user=user_name --password=password --database=database_name

PS. 可以用以下命令查看 MySQL 的各种字符编码:

mysql> status;
mysql> SHOW VARIABLES LIKE 'character%';

 

参考链接:

Leave a Reply

Your email address will not be published. Required fields are marked *