O cliente Mysql 5.6 não pode mostrar caracteres UTF8

1

Os bancos de dados MySQL estão hospedados no AWS RDS Mysql 5.6

Em uma das instâncias do EC2 Cent OS 6.5, eu tinha o Mysql Client 5.1. Eu usei para executar consultas SELECT sobre o RDS-Mysql. Há uma consulta específica que fazemos para gerar um arquivo CSV. O banco de dados contém algumas das línguas indianas, a saber: hindi, marathi e bengali. Ao usar o cliente Mysql 5.1, esses textos de idioma foram armazenados corretamente em CSV.

Eu atualizei o cliente para o mysql 5.6.26 (RPMs baixados de: AQUI para Redhat / Oracle Linux). Agora, a mesma consulta fornece caracteres ilegíveis para a mesma consulta.

Um pequeno exemplo da diferença na saída:
Cliente Mysql 5.1:

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

Cliente Mysql 5.6:

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

Eu defini o caractere em '.my.cnf'

cat /root/.my.cnf


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

Também verifiquei o conjunto de caracteres do banco de dados / RDS (mostre variáveis como 'char%'). Havia alguns conjuntos de caracteres latinos. Eu mudei para o utf8 e testei o resultado da consulta SELECT novamente --- Nada mudou.
[A] Antes de mudanças de parâmetros:

+--------------------------+-------------------------------------------+
| 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] Após alterações de parâmetro:

+--------------------------+-------------------------------------------+
| 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/ |
+--------------------------+-------------------------------------------+

Qual poderia ser o problema aqui? É um bug no cliente ver 5.6?

    
por anup 25.09.2015 / 10:30

1 resposta

1

Suponho que aconteceu o seguinte: você (ou outra pessoa) criou o banco de dados não-utf-8 e inseriu os dados do utf-8 nele. Então você de alguma forma (não está claro para mim se isso aconteceu, você não mencionou, no entanto isso não é tão importante) atualizou seu banco de dados para 5.6, ou, pelo menos, o cliente mysql. O novo cliente vê claramente que a codificação do banco de dados é latin1 e interpreta os dados reais do utf-8 (e ele tem o direito de fazer isso).

Sugiro que você faça o dump do banco de dados usando o mysql 5.1 client, você obterá o dump contendo as seqüências válidas do utf-8, então criará o banco de dados com codificação utf-8 e importará dados para ele com um cliente mais novo. Preste atenção na diretiva set names do seu dump e altere-a se necessário (para o utf-8). Observe também que nenhuma ação destrutiva (como descartar bancos de dados) deve ser executada, a menos que você esteja absolutamente feliz com o resultado.

    
por 25.09.2015 / 12:42