在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")