【问题标题】:Character encoding in R MySQL on Linux machineLinux机器上R MySQL中的字符编码
【发布时间】:2019-11-28 11:44:18
【问题描述】:

我正在尝试获取包含一些带有变音符号的德语单词的数据。遵循以下结构,在 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"

我检查了This 解决方案,但是当我将'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"

没有解决问题!

【问题讨论】:

    标签: sql r ubuntu encoding rmysql


    【解决方案1】:

    而不是:

    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)
    

    【讨论】:

      【解决方案2】:

      不确定此解决方案是否对您有所帮助,但您可以尝试这种方法:

      con <- dbConnect(MySQL(), user = "user", dbname = "database", 
                          host = "host", password = "pass", encoding = "ISO-8859-1")
      

      如果此编码不起作用,请尝试使用不同变体的“蛮力”

      【讨论】:

        猜你喜欢
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 2012-10-27
        相关资源
        最近更新 更多