在windows上使用r中的r mysql::dbwritetable函数将表写入mysql时,会收到一条关于字符[n]的错误消息。
简单的例子是:

    table <- data.frame(a=seq(1:3), b=c("És", "España", "Compañía"))
    table

 a        b
1 1       És
2 2   España
3 3 Compañía


db <- dbConnect(MySQL(), user = "####", password = "####", dbname ="test", host= "localhost")

RMySQL::dbWriteTable(db, name="test1", table, overwrite=T, append=F )

Error in .local(conn, statement, ...) :
  could not run statement: Invalid utf8 character string: 'Espa'

正如你所看到的,口音(“_”)没有问题,但有尼娜字符(“埃斯帕尼娜”)。
另一方面,mysql没有问题,因为这个查询工作得很好:
INSERT INTO test.test1 (a,b)
values (1, "España");

我之前写这张表已经试过的东西:
所有表格的编码(X)所有表格的ICONV(X,“UTF-8”,“UTF-8”)。
发送预查询:dbsendquery(db,“set names utf8;”)
将mysql表排序规则更改为:“utf-8-general、latin-1、latin-1-西班牙语…”
*尝试“拉丁-1”编码,也没用。
我一直在寻找这个问题的答案,但没有成功。
请帮忙!
版本:
MySQL 5.7.17版本
R版本3.3.0
sys.getLocale()
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=C"

PS:在Linux环境下运行良好,但在当前的项目中,我一直使用Windows:(

最佳答案

这在Windows中对我有效:

write.csv(table, file = "tmp.csv", fileEncoding = "utf8", quote = FALSE, row.names = FALSE)

db <- dbConnect(MySQL(), user = "####", password = "####", dbname ="test", host= "localhost")

dbWriteTable( db, value = "tmp.csv", name = "test1", append = TRUE, row.names = FALSE, sep = ",", quote='\"', eol="\r\n")

07-24 18:28
查看更多