我一直试图从 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)
使用 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 ?????
为了完整起见,这是我的 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