MySQL命令無(wú)法輸入中文問(wèn)題的解決方式
發(fā)現(xiàn)問(wèn)題
近期通過(guò) mysql 命令連接 mysql server 的時(shí)候, 出現(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)
輸入的所有中文都會(huì)被替換為空. 上述測(cè)試為官方的 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 命令行的交互模式不支持所有寬字符的輸入.
不能輸入中文會(huì)出現(xiàn)什么問(wèn)題?
從測(cè)試來(lái)看, 該 bug 只影響通過(guò) mysql 命令以交互模式連接 mysql server 的會(huì)話操作 . 如果線上有使用此 bug 的版本, 操作表的時(shí)候可能會(huì)出現(xiàn)丟失中文的問(wèn)題.
以下方式不受影響:
1. 各程序通過(guò)相關(guān)驅(qū)動(dòng)連接數(shù)據(jù)庫(kù);
2. mysql 命令以非交互模式操作, 比如 mysql -h ... -p.... < /tmp/t.sql
哪些版本受影響
該 bug 在 5.7.34 和 8.0.24 中修復(fù), 見(jiàn) github-mysql-patch-117fb2 . 從修復(fù)的補(bǔ)丁來(lái)看, bug 與 libedit 版本沒(méi)有關(guān)系, 不管是 rpm, deb 還是官方的 build 版本都受此影響.
從我們的測(cè)試來(lái)看, 以下版本都會(huì)受到影響:
5.7.31 ~ 5.7.33
8.0.21 ~ 8.0.23
備注: 其它發(fā)行版暫不明確, 大概率也會(huì)出同樣的問(wèn)題, 不過(guò)發(fā)行版通常比官方的慢一拍, 其低版本可能會(huì)提前修復(fù)該問(wèn)題.
如何處理
線上的版本的選擇可以集中在使用過(guò)的一些版本, 比如筆者常用的:
- 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)使用了上述受影響的版本, 可以采用以下方式處理:
臨時(shí)處理
不方便升級(jí)的話, 可以先使用 5.7.30 以下或 5.7.34 及以上版本的 mysql client 命令;
小版本升級(jí)
如果方便進(jìn)行小版本升級(jí), 建議升級(jí)到以下版本:
5.7.35
8.0.26
總結(jié)
到此這篇關(guān)于MySQL命令無(wú)法輸入中文問(wèn)題的文章就介紹到這了,更多相關(guān)MySQL命令無(wú)法輸入中文內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql提示[Warning] Invalid (old?) table or database name問(wèn)題的解決方
今天一個(gè)朋友的上服務(wù)器出現(xiàn)[Warning] Invalid (old?) table or database name問(wèn)題,通過(guò)分析binlog日志發(fā)現(xiàn),在以下sql語(yǔ)句中出現(xiàn)問(wèn)題,由于涉及敏感內(nèi)容,用sql語(yǔ)法表示2012-07-07
mysql父子集查詢(根據(jù)父級(jí)查詢所有子集)
某些場(chǎng)景可能需要維護(hù)一些有父子關(guān)系的數(shù)據(jù),本文主要介紹了mysql父子集查詢(根據(jù)父級(jí)查詢所有子集),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
mysql提示got timeout reading communication packets的解決方法
今天發(fā)現(xiàn)mysql錯(cuò)誤日志中出現(xiàn)got timeout reading communication packets,一般情況因?yàn)椴糠猪?yè)面生成有問(wèn)題導(dǎo)致,這里簡(jiǎn)單分享一下解決方法2019-05-05
SQL實(shí)現(xiàn)LeetCode(180.連續(xù)的數(shù)字)
這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(180.連續(xù)的數(shù)字),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
MySQL存儲(chǔ)過(guò)程的優(yōu)化實(shí)例
在編寫(xiě)MySQL存儲(chǔ)過(guò)程的過(guò)程中,我們會(huì)時(shí)不時(shí)地需要對(duì)某些存儲(chǔ)過(guò)程進(jìn)行優(yōu)化,其目的是確保代碼的可讀性、正確性及運(yùn)行性能。本文以作者實(shí)際工作為背景,介紹了對(duì)某一個(gè)MySQL存儲(chǔ)過(guò)程優(yōu)化的整個(gè)過(guò)程。2016-07-07
mysql隨機(jī)查詢?nèi)舾蓷l數(shù)據(jù)的方法
這篇文章主要介紹了mysql中獲取隨機(jī)內(nèi)容的方法,需要的朋友可以參考下2013-10-10
SQL Server 數(shù)據(jù)庫(kù)的備份詳細(xì)介紹及注意事項(xiàng)
這篇文章主要介紹了SQL Server 備份詳細(xì)介紹及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2016-12-12
Sphinx/MySQL 協(xié)議支持與SphinxQL應(yīng)用實(shí)例
Sphinx/MySQL 協(xié)議支持與SphinxQL應(yīng)用例子,供大家學(xué)習(xí)參考2013-02-02
實(shí)現(xiàn)數(shù)據(jù)庫(kù)水平切分的兩個(gè)思路
今天小編就為大家分享一篇關(guān)于實(shí)現(xiàn)數(shù)據(jù)庫(kù)水平切分的兩個(gè)思路,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03

