mysql - 在 R 中从 MySQL 获取 UTF-8 文本返回 "????"

标签 mysql r utf-8 character-encoding odbc

我一直在尝试从 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 ?????

为了完整起见,这是我的 session 信息:

> 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 

最佳答案

感谢@chooban,我发现连接 session 使用的是 latin1 而不是 utf8。这是我找到的两个解决方案:

  • 对于 RMySQL,连接后运行查询 SET NAMES utf8 以更改连接字符集。
  • 对于 RODBC,请在 DSN 字符串中使用 CharSet=utf8 进行连接。我无法通过 ODBC 运行SET NAMES

This question为我指明了正确的方向。

关于mysql - 在 R 中从 MySQL 获取 UTF-8 文本返回 "????",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47665540/

相关文章:

php - 从 mysql 选择表时编码错误

mysql - 我如何在 SQL 中合并多个 WHERE (STUCK)

r - R:将多个库位置与最新软件包组合在一起

R:在指定日期之后的数据框中查找最接近的日期(索引)

unicode - 什么是统一码?以及编码如何工作?

string - 用 bash 替换字符串中的百分比转义字符(%20、%5B、…)

mysql - 再添加一张表后,列之间会相乘

PHP + MySQL - 不会从数据库读取

MySQL查询获取未多次赋值的值

r - 错误 : C stack usage too close to the limit when viewing data frame tail