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 InnoDB存储引擎的内存管理
Apr 08 MySQL
MySql开发之自动同步表结构
May 28 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
MySQL 数据类型详情
Nov 11 MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
Nov 17 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
MySQL详解进行JDBC编程与增删改查方法
Jun 16 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
php列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
php 使用array函数实现分页
2015/02/13 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
Python Series从0开始索引的方法
2018/11/06 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
详解python中index()、find()方法
2019/08/29 Python
python 实现简单的FTP程序
2019/12/27 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
Python requests接口测试实现代码
2020/09/08 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
会计电算化大学生职业规划书
2014/02/05 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
解析CSS 提取图片主题色功能(小技巧)
2021/05/12 HTML / CSS
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android