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 Router的安装部署
Apr 24 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
MYSQL 表的全面总结
Nov 11 MySQL
MySQL学习之基础操作总结
Mar 19 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
MySQL中JOIN连接的基本用法实例
Jun 05 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
MySQL数据库查询之多表查询总结
Aug 05 MySQL
DQL数据查询语句使用示例
Dec 24 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字符串分割函数用法实例
2015/03/17 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
Python中的元类编程入门指引
2015/04/15 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
Python目录和文件处理总结详解
2019/09/02 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
平民服装店创业计划书
2014/01/17 职场文书
小学安全教育材料
2014/02/17 职场文书
少年闰土教学反思
2014/02/22 职场文书
考研导师推荐信范文
2015/03/27 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
工伤认定行政答辩状
2015/05/22 职场文书