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 中的错误吗?

答案1

我猜想发生了以下情况:您(或其他人)创建了非 utf-8 数据库并将 utf-8 数据插入其中。然后您以某种方式(我不清楚是否发生了这种情况,您没有提到这一点;但这并不重要)将数据库升级到 5.6,或者至少升级了 mysql 客户端。新客户端清楚地看到数据库编码是 latin1,并误解了实际的 utf-8 数据(他有权这样做)。

我建议您使用 mysql 5.1 客户端转储数据库,您将获得包含有效 utf-8 序列的转储,然后使用 utf-8 编码创建数据库并使用较新的客户端将数据导入其中。注意set names转储中的指令,并在需要时将其更改为 utf-8。还请注意,除非您对结果绝对满意,否则不应执行任何破坏性操作(如删除数据库)。

相关内容