【问题标题】:Encoding issues when trying to write data from R to MySQL尝试将数据从 R 写入 MySQL 时出现编码问题
【发布时间】:2018-10-17 12:15:33
【问题描述】:

我的数据包含特殊字符,例如德语变音符号。

p=structure(list(ppl_code = c(992621L, 992381L, 992136L, 991989L, 
991898L, 991759L, 991681L, 991593L, 991294L, 991036L, 990934L, 
990751L, 990535L, 990411L, 990182L, 989507L), proj_name = c("klo", 
"Dalbygda", "Oosterhorn", "Hån", "Yatir", "Montigny la Cour", 
"Valle Hermoso", "Acciona Honawad - 120 MW", "Apfeltrang", "RiaBlades", 
"General Acha", "Lindau-Böhlitz", "Apfeltrang", "Alcazar Round 2", 
"Peckelsheim", "Linnich 3")), .Names = c("ppl_code", "proj_name"
), row.names = 15:30, class = "data.frame")

当我尝试将其写入 MySQL 数据库时:

conn <- dbConnect(
       drv = RMySQL::MySQL(),
       dbname = "mydb",
       host = "#####",
       username = "#####",
       password = "#####")

dbWriteTable(conn, value = p, name = "MyTable",row.names=FALSE)

我收到编码错误:

could not run statement: Invalid utf8 character string: 'Lindau-B'

我已经检查了几个关于这个问题的帖子,比如herehere,但它们都是一般性的解释,没有明确的解决方案! 任何人都可以帮助我提出可以解决此问题的明确查询吗?

【问题讨论】:

  • utf-8 被 o 上的变音符号窒息。它在英文版中不是一个公认的字符,所以你需要找到一种方法让这个词可以被 sql 接受,要么删除它并用 o 替换,要么找到另一个编码范例
  • @sconfluentus,但是如果我将表格写入 csv 文件并再次读取它,它将起作用:write.csv(p, file = "tmp.csv", fileEncoding = "utf8", quote = FALSE, row.names = FALSE) dbWriteTable(conn, value = "tmp.csv", name = "test1", append = TRUE, row.names = FALSE, sep = ",", quote='\"', eol="\r\n") 我想找到一种方法来避免这种愚蠢的 csv 转换!
  • 所以它可能不在 UTF-8 中尝试在 R 中转换而不是导出,此链接有有用的信息:stackoverflow.com/questions/23699271/…

标签: mysql r encoding utf-8 rmysql


【解决方案1】:

您需要声明正在使用 UTF-8。

Tool -> Global Options -> Code -> Saving and put UTF-8

rs <- dbSendQuery(con, 'SET NAMES utf8')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2018-10-14
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多