Mysql 5.6 クライアントは UTF8 文字を表示できません

Mysql 5.6 クライアントは UTF8 文字を表示できません

MySQLデータベースはAWS RDS Mysql 5.6でホストされています

EC2 Cent OS 6.5 インスタンスの 1 つに、Mysql Client 5.1 がありました。これを使用して、RDS-Mysql で SELECT クエリを実行しました。CSV ファイルを生成するために実行する特定のクエリが 1 つあります。データベースには、ヒンディー語、マラーティー語、ベンガル語など、インドの言語が含まれています。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 のバグでしょうか?

答え1

次のようなことが起こったと推測します。あなた (または他の誰か) が非 UTF-8 データベースを作成し、そこに UTF-8 データを挿入しました。その後、何らかの方法で (それが起こったかどうかは私にはわかりません。あなたは言及していませんが、これはそれほど重要ではありません)、データベースを 5.6 にアップグレードしました。少なくとも、MySQL クライアントをアップグレードしました。新しいクライアントは明らかにデータベースのエンコーディングが latin1 であると認識し、実際の UTF-8 データを誤って解釈します (そして、彼にはそうする権利があります)。

mysql 5.1 クライアントを使用してデータベースをダンプすることをお勧めします。有効な utf-8 シーケンスを含むダンプを取得し、utf-8 エンコードでデータベースを作成し、新しいクライアントを使用してデータをインポートします。set namesダンプ内のディレクティブに注意し、必要に応じて変更します (utf-8 に変更します)。また、結果に完全に満足しない限り、破壊的なアクション (データベースの削除など) を実行しないでください。

関連情報