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的Seconds_Behind_Master
May 18 MySQL
MySQL 视图(View)原理解析
May 19 MySQL
Mysql实现主从配置和多主多从配置
Jun 02 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
分享几个简单MySQL优化小妙招
Mar 31 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 MySQL
MySql统计函数COUNT的具体使用详解
Aug 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编程开发“虚拟域名”系统
2006/10/09 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
php数组随机排序实现方法
2015/06/13 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
js的event详解。
2006/09/06 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
实习单位接收函模板
2014/01/10 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
复兴之路观后感
2015/06/02 职场文书