sql - Linux机器上R MySQL中的字符编码
问题描述
我正在尝试获取包含一些带有变音符号的德语单词的数据。遵循以下结构,Windows机器中的一切都很好:
Sys.setlocale('LC_ALL','C')
library(RMySQL)
conn <- dbConnect(MySQL(), user = "user", dbname = "database",
host = "host", password = "pass")
sql.query <- paste0("some query")
df <- dbSendQuery(conn, sql.query)
names <- fetch(df, -1)
dbDisconnect(conn)
作为一个例子,我有:
names[1230]
[1] "Strübbel"
为了在 Linux Ubuntu 中获得相同的结果,我应该改变什么?查询将毫无问题地运行,但结果是:
names[1230]
[1] "Str\374bbel"
我已经检查了这个解决方案,但是当我把'set character set "utf8"'
查询放在里面时,我得到了以下错误:
df <- dbSendQuery(conn, sql.query, 'set character set "utf8"')
names <- fetch(df, -1)
Error in .local(conn, statement, ...) :
unused argument ("set character set \"utf8\"")
我应该提到结果的编码是未知的:
Encoding(names[1230])
[1] "unknown"
并做:
Encoding(names[1230]) <- "UTF-8"
names[1230]
[1] "Str<fc>bbel"
不解决问题!
解决方案
代替 :
Sys.setlocale('LC_ALL','C')
你必须使用:
Sys.setlocale('LC_ALL','en_US.UTF-8')
并在 sql 查询中:
library(RMySQL)
conn <- dbConnect(MySQL(), user = "user", dbname = "database",
host = "host", password = "pass")
sql.query <- paste0("some query")
dbSendQuery(conn,'set character set "utf8"')
df <- dbSendQuery(conn, sql.query)
names <- fetch(df, -1)
dbDisconnect(conn)
推荐阅读
- java - 客户端进程(在带有aidl的android IPC中)如何知道远程服务器类?
- r - 如何生成带有随机字符的重复主题的序列
- python-3.x - AttributeError:“_tkinter.tkapp”对象没有属性“选择”
- php - 资源所有者或授权服务器拒绝了请求
- java - 如何使用分数输入命令行参数
- java - 预期的数组类型;找到 int
- reactjs - Axios 花时间在 React 应用程序中发送 api 响应
- java - 点燃扫描查询抛出类 org.apache.ignite.binary.BinaryInvalidTypeException
- tensorflow - 优化神经网络以在嵌入式系统中运行
- amazon-s3 - 使用 AWS Glue 从 RDS -> S3 移动数据