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


Posted in MySQL onAugust 30, 2021

发现问题

近期通过 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命令无法输入中文内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
mysql部分操作
Apr 05 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
一次MySQL启动导致的事故实战记录
Sep 15 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
mysql 索引合并的使用
Aug 30 #MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 #MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 #MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 #MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 #MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 #MySQL
MySQL非空约束(not null)案例讲解
Aug 23 #MySQL
You might like
php中处理模拟rewrite 效果
2006/12/09 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
隐性调用php程序的方法
2015/06/13 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python 递归相关知识总结
2021/03/03 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
英国网上购买门:Direct Doors
2018/06/07 全球购物
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
大学四年个人自我小结
2014/03/05 职场文书
会计专业求职信范文
2014/03/16 职场文书
三项教育活动实施方案
2014/03/30 职场文书
大一新生检讨书
2014/10/29 职场文书
故意杀人案辩护词
2015/05/21 职场文书
python关于集合的知识案例详解
2021/05/30 Python