2017-05-07 12 views
0

나는 어제부터이 문제에 대해 내 마음을 잃고있다.마지막으로 MySQL에서 utf8mb4를 올바르게 설정하는 방법은 무엇입니까?

MySQL 데이터베이스를 utf8에서 utf8mb4로 변환하려고합니다. 너무 https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4는 등 Cannot store emoji in database, Change MySQL default character set to UTF-8 in my.cnf?,

내 데이터베이스가 예상대로 utf8mb4_unicode_ci collation을 갖고있는 것 같아요, 그리고 그녀의 모든 테이블 이렇게하려면, 나는 그 사이트/스레드를 따랐다. 내가 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';을 진행 그럼에도 불구

, 내가 얻을 : 데비안 7

[client] 
default-character-set = utf8mb4 

[mysql] 
default-character-set = utf8mb4 

[mysqld] 
character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
init-connect = 'SET collation_connection = utf8mb4_unicode_ci' 
init-connect = 'SET NAMES utf8mb4' 

내 MySQL 버전은 5.5.54이다, 모든 설정 :

#With a Root access 
Variable_name    Value 
character_set_client  utf8    #expecting utf8mb4 
character_set_connection utf8    #expecting utf8mb4 
character_set_database  utf8mb4    #good 
character_set_filesystem binary    #good 
character_set_results  utf8    #expecting utf8mb4 
character_set_server  utf8mb4    #good 
character_set_system  utf8    #expecting utf8mb4 
collation_connection  utf8_general_ci  #expecting utf8mb4_unicode_ci 
collation_database   utf8mb4_unicode_ci #good 
collation_server   utf8mb4_unicode_ci #good 

#With a standard user access 
Variable_name    Value 
character_set_client  utf8    #expecting utf8mb4 
character_set_connection utf8mb4    #good 
character_set_database  utf8mb4    #good 
character_set_filesystem binary    #good 
character_set_results  utf8    #expecting utf8mb4 
character_set_server  utf8mb4    #good 
character_set_system  utf8    #expecting utf8mb4 
collation_connection  utf8mb4_unicode_ci #good 
collation_database   utf8mb4_unicode_ci #good 
collation_server   utf8mb4_unicode_ci #good 

나는 이런 /etc/mysql/conf.d/90-my.cnf 파일을 설정합니다.

나를 도울 수있는 단서가 있습니까?

당신의 도움에 대한 들으, 내 나쁜 영어 죄송합니다 ...

편집

재미있는 사실 :

: 나는 인라인 명령에서 변수를 확인할 때, 나는이있어
mysql> show variables like "%character%"; 
+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8mb4     | 
| character_set_connection | utf8mb4     | 
| character_set_database | utf8mb4     | 
| character_set_filesystem | binary      | 
| character_set_results | utf8mb4     | 
| character_set_server  | utf8mb4     | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

나는 (비 수퍼 유저 액세스) phpMyAdmin을 확인했을 때 여전히 character_set_client에 대한 utf8character_set_results을 가지고 있지만

,

답변

0

사용자가 root 인 경우 init-connect으로 연결하면 무시됩니다.

에 응용 프로그램에SUPER 권한이없는 응용 프로그램을 제공하십시오.

그런 다음 앱에서 연결을 설정할 때마다 문자 집합을 제공하는 언어 별 방법을 사용하십시오. (또는 SET NAMES utf8mb4을 실행하십시오.) 어떤 앱 언어를 사용하고 있습니까? 경우 다른 뭔가에

잘못 가고, Trouble with utf8 characters; what I see is not what I stored

+0

들으에서 우려를 많이 "모범 사례"를 참조하십시오. 방금 데이터베이스에 대한 표준 사용자 액세스로 문자/데이터 정렬 기능을 추가하기 위해 스레드를 편집했습니다. 결과는 나아졌지만 여전히 완벽하지는 않습니다. 나는 당신의 설명이 아주 좋다는 당신의 연결 한 포스트에 빨리보기를 가지고 갔다. 나는 직장에서 돌아 오면 곧 그걸 시험해 보겠다. 일이 있으면 말해 줄께. (Btw는'HEX (txt) '를 시도했는데 결과는 좋았습니다. 예상대로 모든 것이 16 진수로 인코딩 된 것 같습니다.) 어쨌든, 나는 당신을 신속하게 연락합니다. Thx again – Vae

+0

헤이 릭, 여기 뉴스가있다 : 나는 당신이 "해야할 일"부분에서 언급 한 모든 것을 설정했다. 데이터의 테스트는 훌륭합니다 (이중 인코딩이 없으며 모든 문자가 올바르게 인식됩니다). 내 문제는 : emojis 대신 데이터베이스에 물음표가 있습니다 (그러나 내 웹 사이트에 올바르게 표시되어 있음). "저장할 바이트는 utf8/utf8mb4로 인코딩되지 않습니다.이 문제를 해결하십시오." 이 문제를 어떻게 해결할 수 있습니까? 참고로 PHP를 사용하고 있습니다. Thx가 다시 관심을 갖습니다. 곧 뵙죠. – Vae

+0

"설명은 매우 좋습니다"- 나는 그 설명을 연마 한 지 몇 년 동안 관리하는 것이 싫다. –