Почему MySQL Connection игнорирует директиву SET NAMES utf8 в R?

Я подключился к базе данных MySQL из R и запустил директиву «установить имена utf8».

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

Обычно это помогает, когда я хочу вернуть данные 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

Здесь очевидно, что переменная character_set_client не установлена. Это также не помогает установить его явно. На самом деле кажется, что он полностью игнорирует это.

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.


person Dr. Mike    schedule 07.07.2014    source источник


Ответы (1)


Происходит рукопожатие, и клиент в конечном итоге говорит MySQL использовать latin1. Рукопожатие можно отключить или при первоначальном соединении SET NAMES utf8.

См.: http://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_character-set-client-handshake

person Morgan Tocker    schedule 07.07.2014
comment
Спасибо за ответ и разъяснение, почему так происходит. Однако, как вы можете видеть, я выдаю «SET NAMES utf8» при первоначальном подключении. Но это не помогает... Можно ли отключить рукопожатие от R? - person Dr. Mike; 08.07.2014
comment
Отключение рукопожатия является опцией сервера: skip-character-set-client-handshake - person Morgan Tocker; 08.07.2014