MySQL命令无法输入中文问题的解决方式

发现问题

近期通过 mysql 命令连接 mysql server 的时候, 出现了不能输入中文的现象, 如下所示:

mysql> SELECT 'Chinese characters <> are stripped';
+------------------------------------+
| Chinese characters <> are stripped |
+------------------------------------+
| Chinese characters <> are stripped |
+------------------------------------+
1 row in set (0.00 sec)

输入的所有中文都会被替换为空. 上述测试为官方的 mysql-5.7.32 版本.

遍历官方 mysql 的 changelog-5.7.34发现了 oracle 官方的 mysql-5.7.34 和 mysql-8.0.24 分别修复了以下 bug

For builds compiled using the libedit library, if the mysql client was invoked
with the --default-character-set=utf8 option, libedit rejected input of
multibyte characters. (Bug #32329078, Bug #32583436, Bug #102806)

参考bug-102806, 出现和描述中类似的事情, mysql 命令行的交互模式不支持所有宽字符的输入.

不能输入中文会出现什么问题?

从测试来看, 该 bug 只影响通过 mysql 命令以交互模式连接 mysql server 的会话操作 . 如果线上有使用此 bug 的版本, 操作表的时候可能会出现丢失中文的问题.

以下方式不受影响:

1. 各程序通过相关驱动连接数据库;
2. mysql 命令以非交互模式操作, 比如 mysql -h ... -p.... < /tmp/t.sql

哪些版本受影响

该 bug 在 5.7.34 和 8.0.24 中修复, 见 github-mysql-patch-117fb2. 从修复的补丁来看, bug 与 libedit 版本没有关系, 不管是 rpm, deb 还是官方的 build 版本都受此影响.

从我们的测试来看, 以下版本都会受到影响:

5.7.31 ~ 5.7.33
8.0.21 ~ 8.0.23

备注: 其它发行版暂不明确, 大概率也会出同样的问题, 不过发行版通常比官方的慢一拍, 其低版本可能会提前修复该问题.

如何处理

线上的版本的选择可以集中在使用过的一些版本, 比如笔者常用的:

- percona 分支
percona-5.6.45
percona-5.7.28
percona-8.0.22

- 官方版本
mysql-5.6.29
mysql-5.7.28
mysql-8.0.19

如果线上已经使用了上述受影响的版本, 可以采用以下方式处理:

临时处理

不方便升级的话, 可以先使用 5.7.30 以下或 5.7.34 及以上版本的 mysql client 命令;

小版本升级

如果方便进行小版本升级, 建议升级到以下版本:

5.7.35
8.0.26

总结

到此这篇关于MySQL命令无法输入中文问题的文章就介绍到这了,更多相关MySQL命令无法输入中文内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL命令无法输入中文问题的解决方式

    发现问题 近期通过 mysql 命令连接 mysql server 的时候, 出现了不能输入中文的现象, 如下所示: mysql> SELECT 'Chinese characters <> are stripped'; +------------------------------------+ | Chinese characters <> are stripped | +------------------------------------+ | Chinese ch

  • PropertiesLoaderUtils 出现中文乱码的解决方式

    我就废话不多说了,大家还是直接看代码吧~ try { EncodedResource encodedResource = new EncodedResource(new ClassPathResource(path), Charsets.UTF_8); Properties properties = PropertiesLoaderUtils.loadProperties(encodedResource); } catch (IOException e) { LOGGER.info("Champ

  • 关于element-ui表单中限制输入纯数字的解决方式

    我就废话不多说了,大家还是直接看代码吧~ <input type="text" class="el-input__inner" oninput = "value=value.replace(/[^\d]/g,'')" > 补充知识:element form表单验证(数字,手机号,邮箱) 我就废话不多说了,大家还是直接看代码吧~ <template> <div class="hello"> &

  • mysql命令提示行连接乱码的解决

    WINDOWS 1.MySQL是有一些环境变量可以设置, 可输入:show variables;可查看当前的环境变量设置: 2.这些变量当中有一部分与字符相关的设置, 可输入:show variables like ´character%´;查看: 3.其中character_set_results决定返回结果的编码, windows下设为gb2312即可正常显示中文: 设置方法:set character_set_results=gb2312;,然后回车即可: 4.当然,如果想通过命令提示行窗

  • PHP MPDF中文乱码的解决方式

    废话不多说了,直接奔入主题了. 推荐教程:PHP使用MPDF类生成PDF的方法 1.config.php文件,大约67行: $this->autoLangToFont = true; 2.使用的时候 注意, +aCJK 这个参数,而不是  c这个参数 $mpdf=new \mPDF('+aCJK','A4','','',32,25,27,25,16,13); $mpdf->WriteHTML($content); $mpdf->Output(); 然后就输出中文了 这个针对版本mPDF6

  • PHP连接MySQL查询结果中文显示乱码解决方法

    我们首先假设数据库中采用的编码为UTF-8这时我们在PHP页面中应当首先添加 复制代码 代码如下: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 此处charset的值utf-8必须与文件保存时的编码类型一样 之后在数据库查询前添加 复制代码 代码如下: mysql_query("set names 'utf8'"); 该行语句的编码值也应当

  • MySQL一劳永逸永久支持输入中文的方法实例

    目录 1.在C盘中,在查看中将隐藏的项目放出,点开ProgramData 2.在M字母的区域内找到MySQL 3.选择MySQL Server 5.7 4.创建my.ini副本防止出错(直接复制粘贴),点进my.ini 5.带#的都是注释,不必理睬,直接找到[client],添加以下内容 6.再找到[mysqld],添加以下语句 7.保存后,找到服务重启(关闭窗口,重点图标不行!!!) 8.在弹出的框中,找到MySQL57重启 总结 1.在C盘中,在查看中将隐藏的项目放出,点开ProgramDa

  • php读取mysql乱码,用set names XXX解决的原理分享

    先说MySQL的字符集问题.Windows下可通过修改my.ini内的 PHP代码 复制代码 代码如下: [mysql] default-character-set=utf8 //客户端的默认字符集 [mysqld] default-character-set=utf8 //服务器端默认的字符集 假设我们把两个都设为utf8,然后在MySQL Command Line Client里面输入"show variebles like"character_set_%";"

  • dos命令行不能输入中文怎么办该如何解决

    dos命令行不能输入中文的解决办法 复制代码 代码如下: reg add "HKEY_CURRENT_USER\Console" /v "LoadConIme" /d 1 /t REG_DWORD /f 首先检查 system32 文件夹下 conime.exe 文件存不存在,如果不存在,就到别的电脑去复制一个过来,然后关掉所有的控制台窗口,在"开始"->"运行"中输入如下内容并执行: reg add "HKE

  • MySQL从命令行导入SQL脚本时出现中文乱码的解决方法

    本文实例讲述了MySQL从命令行导入SQL脚本时出现中文乱码的解决方法.分享给大家供大家参考,具体如下: 在图形界面管理工具 MySql Query Browser中打开脚本(脚本包括建库.建表.添加数据),并执行,不会有任何问题:但是使用mysql命令行工具执行建库脚本时,添加数据中如果包含中文,存入的数据就是乱码或是???... 解决方法1:在MySql安装目录下找到my.ini,将[mysql]下的default-character-set=latin1改为default-characte

随机推荐