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 相关文章推荐
left join、inner join、right join的区别
Apr 05 MySQL
教你用eclipse连接mysql数据库
Apr 22 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
MySQL系列之十二 备份与恢复
Jul 02 MySQL
mysql 索引合并的使用
Aug 30 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
MySQL派生表联表查询实战过程
Mar 20 MySQL
MySQL数据库中的锁、解锁以及删除事务
May 06 MySQL
MySQL安装失败的原因及解决步骤
Jun 14 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 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 jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
python之array赋值技巧分享
2019/11/28 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
红高粱观后感
2015/06/10 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS