在我的本地机器(Mac OS)iTerm2终端中,我可以登录远程mysql服务器并成功输入Chinese
个字符
➜ ~ mysql -h remote_ip -u username -p foo --safe-updates
mysql> select '你好';
+--------+
| 你好 |
+--------+
| 你好 |
+--------+
1 row in set (0.01 sec)
然后我通过ssh登录远程服务器
➜ ~ ssh root@remote_ip
并登录相同的mysql服务器
root@qa-web:~# mysql -h remote_ip -u username -p foo --safe-updates
mysql> select '
但是这次我不能在命令行输入汉字,输入后它们会立即消失。
为什么会这样?
以上第二种情况
mysql> status
...
Server characterset: utf8mb4
Db characterset: utf8
Client characterset: utf8mb4
Conn. characterset: utf8mb4
我的机器Mac OS
➜ ~ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
远程服务器
root@hg:~# locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
root@hg:~# locale -a
C
C.UTF-8
en_US.utf8
POSIX
将此sql(select 'hello','你好';
)从Atom复制到Mysql命令行,效果为
mysql> select 'hello','';
+-------+--+
| hello | |
+-------+--+
| hello | |
+-------+--+
1 row in set (0.00 sec)
区域设置
➜ ~ 你好
zsh: command not found: 你好
远程
root@hg:~# 你好
-bash: $'\344\275\240\345\245\275': command not found
答案 0 :(得分:1)
尝试使用mysql --default-character-set=utf8
启动mysql
这会强制character_set_client,character_set_connection和character_set_results变量为UTF8。
来源:MySQL command line formatting with UTF8
当然,如果你使用的是中文特定的字符集,请从中开始。例如GB(gb18030)charsets。
答案 1 :(得分:0)
如果您使用的是cmd
的Windows,那么......
命令“chcp”控制“代码页”。 chcp 65001
提供了utf8,但它也需要安装一个特殊的字符集。 some code pages
在控制台窗口中设置字体:右键单击窗口标题→属性→字体→选择Lucida控制台
答案 2 :(得分:0)
在Unix系统上,您需要确保您的区域设置与终端仿真匹配。程序(如MySQL shell)使用语言环境值来确定要写入终端的编码。
在Mac上,默认语言环境通常是基于UTF-8的,它与默认的iTerm配置文件相匹配。
远程shell时,还需要确保远程语言环境与终端匹配。如果远程服务器是非mac,那么该区域设置更可能不是基于UTF8的。
远程shell时,获取播放中的语言环境
locale
要使用Mac默认值,需要*.utf-8
。例如:
en_gb.utf-8
如果不是,那么你必须改变它,至少是暂时的。查看可用的语言环境:
locale -a
找到合适的语言环境,然后设置LANG环境变量:
export LANG=en_gb.utf-8
现在您可以运行mysql并获得正确的结果。