Базы данных MySQL размещены на AWS RDS Mysql 5.6
На одном из экземпляров EC2 Cent OS 6.5 у меня был клиент Mysql 5.1. Я использовал его для выполнения запросов SELECT через RDS-Mysql. Есть один конкретный запрос, который мы делаем для создания файла 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?
Я предполагаю, что произошло следующее: вы (или кто-то другой) создали базу данных, отличную от utf-8, и вставили в нее данные utf-8. Затем вы каким-то образом (мне непонятно, произошло ли это, вы не упомянули об этом; однако это не так уж важно) обновили свою базу данных до версии 5.6 или, по крайней мере, клиента mysql. Новый клиент ясно видит, что кодировка базы данных - latin1, и неверно интерпретирует фактические данные utf-8 (и он имеет на это право).
Я предлагаю вам сбросить базу данных с помощью клиента mysql 5.1, вы получите дамп, содержащий действительные последовательности utf-8, затем вы создадите базу данных с кодировкой utf-8 и импортируете в нее данные с более новым клиентом. обратите внимание на set names
директиву в вашем дампе и при необходимости измените ее (на utf-8). Также обратите внимание, что не следует выполнять деструктивные действия (например, удаление баз данных), если вы не полностью довольны результатом.