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
Mysql - 常用函数 每天积极向上
Apr 05 MySQL
MySQL创建索引需要了解的
Apr 08 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
分析MySQL抛出异常的几种常见解决方式
May 18 MySQL
Mysql 用户权限管理实现
May 25 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
python 实现多维数组(array)排序
2020/02/28 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
MySQL面试题目集锦
2016/04/14 面试题
青春演讲稿范文
2014/05/08 职场文书
学习型党组织心得体会
2014/09/12 职场文书
机关职员工作检讨书
2014/10/23 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
单位车辆管理制度
2015/08/05 职场文书
小学生节约用水倡议书
2019/08/12 职场文书