Dan*_*son 28 mysql odbc r utf-8 character-encoding
我试图从R中获取MySQL数据库中的UTF-8文本.我在OS X上运行R(通过GUI和命令行尝试),默认语言环境是en_US.UTF-8,没有无论我尝试什么,查询结果显示"?" 对于所有非ASCII字符.
我尝试过设置options(encoding='UTF-8'),DBMSencoding='UTF-8'当通过ODBC连接时,Encoding(res$str) <- 'UTF-8'在获取结果后设置,以及每个的'utf8'变体,都无济于事.从命令行运行查询mysql客户端正确显示结果.
我完全难过了.任何想法为什么它不工作,或我应该尝试的其他事情?
这是一个相当小的测试用例:
$ mysql -u root
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE test (str VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO test (str) VALUES ('?????');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+-----------------+
| str |
+-----------------+
| ????? |
+-----------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
使用RODBC和RMySQL查询R中的表显示"?????" 对于str列:
> con <- odbcDriverConnect('DRIVER=mysql;user=root', DBMSencoding='UTF-8')
> sqlQuery(con, 'SELECT * FROM rtest.test')
str
1 ?????
> library(RMySQL)
Loading required package: DBI
> con <- dbConnect(MySQL(), user='root')
> dbGetQuery(con, 'SELECT * FROM rtest.test')
str
1 ?????
Run Code Online (Sandbox Code Playgroud)
为了完整性,这是我的sessionInfo:
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RMySQL_0.9-3 DBI_0.2-5 RODBC_1.3-6
Run Code Online (Sandbox Code Playgroud)
这里至少要尝试一下.连接后,运行"SHOW VARIABLES LIKE'character_set_%'"并打印出结果.如果没有别的,那么查看你指定的字符集选项是否有用是一个有用的检查.
这对我有用。这是一个完整的例子:
con = dbConnect(drv = MySQL(), user = user, password = password,
dbname = dbname, host=host)
dbSendQuery(con, "SET NAMES utf8mb4;")
dbSendQuery(con, "SET CHARACTER SET utf8mb4;")
dbSendQuery(con, "SET character_set_connection=utf8mb4;")
dbGetQuery(con, "SELECT * FROM WHATEVER")
Run Code Online (Sandbox Code Playgroud)