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로) 변경하십시오. 또한 결과에 완전히 만족하지 않는 한 파괴적인 작업(예: 데이터베이스 삭제 등)을 수행해서는 안 됩니다.

관련 정보