开发者社区> 问答> 正文

在R中从MySQL提取UTF-8文本返回“ ????”?mysql

我一直试图从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

展开
收起
保持可爱mmm 2020-05-17 22:08:00 1509 0
1 条回答
写回答
取消 提交回答
  • 发现连接会话使用的是latin1而不是utf8。这是我找到的两个解决方案:

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

    2020-05-17 22:09:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像