【问题标题】:DBI get query problems when string contain UTF-8 characters in R当字符串在 R 中包含 UTF-8 字符时,DBI 会出现查询问题
【发布时间】:2018-03-09 22:42:22
【问题描述】:

我正在使用以下函数将此查询发送到 MySQL 数据库:

loadDataBudget <- function(korisnik, razinaLabel) {
  lapply( dbListConnections( dbDriver( drv = "MySQL")), dbDisconnect)
  # Connect to the database
  db <- dbConnect(MySQL(), dbname = databaseBudget, host = options()$mysql$host,
                  port = options()$mysql$port, user = options()$mysql$user,
                  password = options()$mysql$password, encoding = "utf8")
  # Construct the fetching query
  query <- sprintf("SELECT positions, x201501, x201502, x201503, x201504, x201505, x201506, x201507, x201508, x201509,
                   x201510, x201511, x201512 FROM %s WHERE naziv = '%s' AND razina = '%d'",
                   tableBudget,
                   korisnik,
                   razinaLabel)
  # Submit the fetch query and disconnect
  data <- dbGetQuery(db, query)
  dbDisconnect(db)
  data
}

如果字符参数 korisnik 包含非 UTF-8 字符,则该函数运行良好。但如果它包含克罗地亚语 UTF-8 字符,则会返回空表。我在 MySQL 数据库中尝试了两种排序规则: utf8_general_ci 和 utf8_croatian_ci 。

我也尝试在查询之前设置名称 utf-8,但没有帮助。

【问题讨论】:

    标签: mysql r utf-8 r-dbi


    【解决方案1】:

    文本在应该有重音克罗地亚字母的地方被截断?

    • 要存储的字节未编码为 utf8mb4。解决这个问题。
    • 另外,请检查读取期间的连接是否为 UTF-8。

    如果这还不够,请参阅中的“截断”和调试提示

    Trouble with UTF-8 characters; what I see is not what I stored

    R 可能需要:

    Tool -> Global Options -> Code -> Saving and put UTF-8
    rs <- dbSendQuery(con, 'set character set "utf8"')
    rs <- dbSendQuery(con, 'SET NAMES utf8')
    

    【讨论】:

    • 不幸的是,这无济于事。我以前已经试过了。
    • SELECT HEX... 给你什么? (有关此调试技术的更多讨论,请参阅链接。)
    • “检查读取期间的连接是否为 UTF-8”的确切含义。我应该如何检查这个。我已将目标列的联盟更改为 utf8mb4_croatian_ci 并合并您的代码,但没有任何反应。
    • @Mislav - 指向 R 文档中的连接和字符集。也许我可以为你解释一下。 (我对 R 不熟悉。)
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2015-10-05
    • 2018-09-03
    • 2013-01-16
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多