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数据库并展示在前端页面的实现代码
May 02 MySQL
MySQL中出现乱码问题的终极解决宝典
May 26 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
mysql性能优化以及配置连接参数设置
May 06 MySQL
MySQL数据库 安全管理
May 06 MySQL
MySQL数据库查询之多表查询总结
Aug 05 MySQL
MySQL新手入门进阶语句汇总
Sep 23 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函数
2006/12/06 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
javascript 简练的几个函数
2009/08/29 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
python创建线程示例
2014/05/06 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
python微信公众号开发简单流程
2018/03/23 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
小学生环保演讲稿
2014/04/25 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
党校毕业个人总结
2015/02/28 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书