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事务的隔离级别与MVCC
Apr 22 MySQL
mysql数据库入门第一步之创建表
May 14 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
MySQL分区表管理命令汇总
Mar 21 MySQL
MySQL分区路径子分区再分区
Apr 13 MySQL
MYSQL事务的隔离级别与MVCC
May 25 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
source.php查看源文件
2006/12/09 PHP
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
详解python eval函数的妙用
2017/11/16 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
python pyheatmap包绘制热力图
2018/11/09 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
教师实习自我鉴定
2013/12/13 职场文书
学前教育专业求职信
2014/09/02 职场文书
党性观念心得体会
2014/09/03 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书