2014-07-07 5 views
0

R에서 MySQL 데이터베이스에 연결하고 "set names utf8"지시문을 실행했습니다.MySQL 연결에서 R의 SET NAMES utf8 지시문을 무시하는 이유는 무엇입니까?

library(RMySQL) 
con<-dbConnect(MySQL(), user='john', password='secret', dbname='awesome', host='myhost') 
dbSendQuery(con, "SET NAMES UTF8; ") 

일반적으로 내 검색어에서 UTF8 데이터를 다시 원할 때 트릭입니다. 그러나 빠른 검사는 모든 변수가해서 character_set_client 변수가 설정되지 않았 음을 분명 여기에 제대로

dbGetQuery(con, "SHOW VARIABLES LIKE 'character_set_%'") 
#    Variable_name      Value 
#1  character_set_client      latin1 
#2 character_set_connection      latin1 
#3 character_set_database      utf8 
#4 character_set_filesystem      binary 
#5 character_set_results      latin1 
#6  character_set_server      latin1 
#7  character_set_system      utf8 

을 설정 한 것을 보여줍니다. 명시 적으로 설정하는 것도 도움이되지 않습니다. 실제로 그것을 완전히 무시한 것처럼 보입니다.

dbSendQuery(con, "SET character_set_client=utf8; ") 
dbGetQuery(con, "SHOW VARIABLES LIKE 'character_set_%'") 
#    Variable_name      Value 
#1  character_set_client      latin1 
#2 character_set_connection      latin1 
#3 character_set_database      utf8 
#4 character_set_filesystem      binary 
#5 character_set_results      latin1 
#6  character_set_server      latin1 
#7  character_set_system      utf8 

어떻게 설정하면 연결이 UTF8로 인코딩 된 텍스트를 반환합니까? 스키마가 utf8 인코딩 및 데이터 정렬을 사용 중입니다.

답변

1

핸드 셰이크가 발생하고 클라이언트가 latin1을 사용하도록 MySQL을 끝냅니다. 핸드 셰이크를 비활성화하거나 초기 연결 SET NAMES utf8에서 가능할 수 있습니다.

은 참조 : 당신의 대답이 발생하는 이유의 설명에 대한 http://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_character-set-client-handshake

+0

감사합니다. 그러나, 당신이 볼 수 있듯이 나는 초기 연결에서 'SET NAMES utf8'을 발행하고 있습니다. 그러나 도움이되지 않습니다 ... R에서 핸드 셰이크를 비활성화 할 수 있습니까? –

+0

핸드 셰이크를 비활성화하는 것은 서버 옵션입니다 :'skip-character-set-client-handshake' –