發(fā)現(xiàn)問題
近期通過 mysql 命令連接 mysql server 的時候, 出現(xiàn)了不能輸入中文的現(xiàn)象, 如下所示:
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 發(fā)現(xiàn)了 oracle 官方的 mysql-5.7.34 和 mysql-8.0.24 分別修復(fù)了以下 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 , 出現(xiàn)和描述中類似的事情, mysql 命令行的交互模式不支持所有寬字符的輸入.
不能輸入中文會出現(xiàn)什么問題?
從測試來看, 該 bug 只影響通過 mysql 命令以交互模式連接 mysql server 的會話操作 . 如果線上有使用此 bug 的版本, 操作表的時候可能會出現(xiàn)丟失中文的問題.
以下方式不受影響:
1. 各程序通過相關(guān)驅(qū)動連接數(shù)據(jù)庫;
2. mysql 命令以非交互模式操作, 比如 mysql -h ... -p.... /tmp/t.sql
哪些版本受影響
該 bug 在 5.7.34 和 8.0.24 中修復(fù), 見 github-mysql-patch-117fb2 . 從修復(fù)的補丁來看, bug 與 libedit 版本沒有關(guān)系, 不管是 rpm, deb 還是官方的 build 版本都受此影響.
從我們的測試來看, 以下版本都會受到影響:
5.7.31 ~ 5.7.33
8.0.21 ~ 8.0.23
備注: 其它發(fā)行版暫不明確, 大概率也會出同樣的問題, 不過發(fā)行版通常比官方的慢一拍, 其低版本可能會提前修復(fù)該問題.
如何處理
線上的版本的選擇可以集中在使用過的一些版本, 比如筆者常用的:
- 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
如果線上已經(jīng)使用了上述受影響的版本, 可以采用以下方式處理:
臨時處理
不方便升級的話, 可以先使用 5.7.30 以下或 5.7.34 及以上版本的 mysql client 命令;
小版本升級
如果方便進行小版本升級, 建議升級到以下版本:
5.7.35
8.0.26
總結(jié)
到此這篇關(guān)于MySQL命令無法輸入中文問題的文章就介紹到這了,更多相關(guān)MySQL命令無法輸入中文內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MySQL命令行操作時的編碼問題詳解
- MySQL source命令的使用簡介
- mysql常用sql與命令之從入門到刪庫跑路
- mysql利用mysqlbinlog命令恢復(fù)誤刪除數(shù)據(jù)的實現(xiàn)
- MySQL存儲過程的查詢命令介紹
- MySQL數(shù)據(jù)庫自動補全命令的三種方法
- mysql密碼中有特殊字符&在命令行下登錄的操作
- Mysql桌面工具之SQLyog資源及激活使用方法告別黑白命令行
- mysql的登陸和退出命令格式
- MySQL如何使用授權(quán)命令grant
- MySQL 基礎(chǔ)常用命令總結(jié)