取UTF-8从MySQL文本中的R返回“????”(Fetching UTF-8 text from

2019-06-18 12:31发布

我被困试图从R.我在OS X上运行v MySQL数据库获取UTF-8文本,其中缺省地区的en_US.UTF-8,和(通过GUI和命令行尝试都)没有不管我怎么努力,查询结果显示为“?” 所有非ASCII字符。

我已经尝试设置options(encoding='UTF-8') DBMSencoding='UTF-8'通过ODBC连接时,设定Encoding(res$str) <- 'UTF-8'在获取结果,以及后每个这些,都没有用的“utf-8”的变种。 运行命令行的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 

Answer 1:

由于@chooban我发现了连接会话使用LATIN1,而不是UTF8。 这里有两个解决办法,我发现:

  • 对于RMySQL,连接后运行查询SET NAMES utf8更改连接的字符集。
  • 对于RODBC,连接使用CharSet=utf8在DSN字符串。 我是不是能够运行SET NAMES通过ODBC。

这个问题我指出了正确的方向。



Answer 2:

这里有一些尝试,至少。 您已经连接后,运行“SHOW VARIABLES LIKE‘character_set_%’”,并打印出结果。 如果没有别的它是一个有用的检查,看看您指定的字符集选项都采取。



Answer 3:

这为我工作。 下面是一个完整的例子:

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")


文章来源: Fetching UTF-8 text from MySQL in R returns “????”