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