#mysql #r #utf-8 #rmysql
#mysql #r #utf-8 #rmysql
Вопрос:
Я подключился к базе данных MySQL из R и выполнил директиву «set names 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 и параметры сортировки.
Ответ №1:
Происходит рукопожатие, и клиент в конечном итоге сообщает MySQL использовать latin1
. Можно отключить рукопожатие или при первоначальном подключении SET NAMES utf8
.
Комментарии:
1. Спасибо за ваш ответ и разъяснение, почему это происходит. Однако, как вы можете видеть, я выдаю ‘SET NAMES utf8’ при первоначальном подключении. Но это не помогает… Могу ли я отключить рукопожатие из R?
2. Отключение квитирования — это опция сервера:
skip-character-set-client-handshake