我试图从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 <- …Run Code Online (Sandbox Code Playgroud) 如果我写
`?` <- function(a,b) (a-b)/a
Run Code Online (Sandbox Code Playgroud)
U+394只要它包含在反引号中,我就可以包括在内.(相比之下,? <- function(a,b) (a-b)/a失败了unexpected input in "?".)显然,R解析UTF-8或Unicode或类似的东西.任务进展顺利,例如评估也是如此
`?`(1:5, 9:13)
Run Code Online (Sandbox Code Playgroud)
.我也可以评估?(1:5, 9:13).
最后,如果我定义了类似的东西,winsorise <- function(x, ?=.05) { ... }那么λ(U+3bb)不需要用反引号"引入"R.然后我可以毫无问题地打电话winsorise(data, .1).
在R的文档中我唯一能提到的unicode就在我脑海中.理解它的人能否更好地向我解释 - 当R需要`理解赋值给♔时,"引擎盖下"会发生什么,但是一旦分配了can(a,b,c)就能解析?