Mysql 5.6客戶端無法顯示UTF8字符

Mysql 5.6客戶端無法顯示UTF8字符

Mysql 資料庫託管在 AWS RDS Mysql 5.6 上

在其中一個 EC2 Cent OS 6.5 實例上,我有 Mysql Client 5.1。我用它在 RDS-Mysql 上執行 SELECT 查詢。我們執行一個特定查詢來產生 CSV 檔案。該資料庫包含一些印度語言,分別是:印地語、馬拉地語和孟加拉語。在使用Mysql 5.1客戶端時,這些語言文字被正確地儲存在CSV中。

我將客戶端升級到 mysql 5.6.26(從以下位置下載 RPM:這裡對於 Redhat/Oracle Linux)。現在,相同的查詢給了相同查詢的亂碼。

輸出差異的簡短範例:
Mysql 5.1 用戶端:

"365253","121","publish","लेनोवो के3 नोट 4जी स्मार्टफोन आज फ्लैश सेल के लिए उपलब्ध है। हालांकि इस फ्लैश सेल में वहीं उपभोक्ता भाग ले पाएंगे जिन्होंने पहले ही इसके लिए रजिस्ट्रेशन किया हो। लेनोवो के3 नोट एक्सक्लूसिवली ईकाॅमर्स साइट

Mysql 5.6客戶端:

"365253","121","publish","लेनोवो का ससà¥<U+008D>ता 4जी फैबलेट के3 नोट आज फà¥<U+008D>लैश के लिà¤<U+008F> होगा उपलबà¥<U+008D>ध""

我已經在 '.my.cnf' 中設定了字符

cat /root/.my.cnf


[client]
user=captain
password=GuruWOWKnowsA11
default-character-set = utf8

我還檢查了資料庫/RDS 的字元集(顯示“char%”等變數)。有幾個拉丁字符集。我將它們更改為 utf8 並再次測試了 SELECT 查詢的結果——沒有任何變化。
[A] 參數更改前:

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | latin1                                    |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.22.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

[B] 參數更改後:

+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.22.R1/share/charsets/ |
+--------------------------+-------------------------------------------+

這裡可能有什麼問題?是客戶端5.6版本的bug嗎?

答案1

我想發生了以下情況:您(或其他人)建立了非 utf-8 資料庫並將 utf-8 資料插入其中。然後你以某種方式(我不清楚它是否發生了,你沒有提到它;但這並不那麼重要)將你的資料庫升級到5.6,或至少是mysql客戶端。新客戶端清楚地看到資料庫編碼是latin1,並誤解了實際的utf-8資料(他有權利這樣做)。

我建議您使用 mysql 5.1 用戶端轉儲資料庫,您將獲得包含有效 utf-8 序列的轉儲,然後使用 utf-8 編碼建立資料庫並使用較新的客戶端將資料匯入其中。注意set names轉儲中的指令,並根據需要進行更改(更改為 utf-8)。另請注意,除非您對結果絕對滿意,否則不應執行任何破壞性操作(例如刪除資料庫)。

相關內容