在MySQL数据库中,表以utf8编码,但由于某种原因,连接是在latin1中。
res <- RMySQL::dbSendQuery(con,"show variables like 'character_set_%'")
dbFetch(res)
Variable_name Value
1 character_set_client latin1
2 character_set_connection latin1
3 character_set_database utf8mb4
4 character_set_filesystem binary
5 character_set_results latin1
6 character_set_server latin1
7 character_set_system utf8
8 character_sets_dir /usr/share/mysql/charsets/
This page explain how to set the connection's character set to utf8 using RMySQL
RMySQL::dbGetQuery(con,"show variables like 'character_set_%'")
RMySQL::dbGetQuery(con,"set names utf8")
但我实际上更喜欢使用dplyr::tbl
来查询数据库。由于dplyr::src_mysql
创建的连接只能发送创建表的sql语句。将连接设置设置为使用utf8编码的dplyr方法是什么?
答案 0 :(得分:3)
我遇到了同样的问题,我解决了以下问题:
foo_db <- src_mysql(host='0.0.0.0',user='dbuser',password='a_password',
dbname='FlightTimes',port=3336)
dbGetQuery(foo_db$con,'SET NAMES utf8')
我发现通过foo_db
查看str(foo_db)
的结构,看到con
类属于MySQLConnection
,然后应用你的{{1}咒语。
答案 1 :(得分:1)
编辑服务器选项文件(位于Debian系统上的/etc/mysql/my.cnf)并添加以下选项:
collation-server = utf8_unicode_ci
character-set-server = utf8
skip-character-set-client-handshake
也可以使用mysql-workbench编辑mysql服务器配置文件。
在此更改之后,dplyr::tbl
将获取以utf-8编码的字符向量。