mysql - 在 R 中将 ISO8859 数据写入 MySQL(错误 :"could not run statement: Invalid utf8 character string")

标签 mysql r utf-8 sas iso-8859-1

我需要将 SAS 传输文件 (.xpt) 导入 MySQL。 因为我没有 SAS,所以我试过了 a) 首先在 R 中导入 .xpt b) 然后使用 RMySQL 库中的 dbWriteTable 从数据框创建一个表。

问题在于数据框包含 ISO8859 字符,而 MySQL(或 dbWriteTable?)需要 UTF-8。 (详细说明:精确度数字符,在ISO8859中为B0,在UTF8中为C2B0) 我收到以下输出:

dbWriteTable(con,"new_table",mydata,overwrite=T) .local(conn, statement, ...) 中的 Fehler: 无法运行语句:无效的 utf8 字符串:'Hallo'>

所以我尝试使用 iconv(mydata,“ISO8859-1”,“UTF8”)之类的 iconv 转换数据,但它似乎只能反过来工作(它正确地将 UTF8 转换为 ISO8859,但反过来却不行).

然后我尝试了很多

SET character_set_client = latin1;
SET character_set_results = latin1;
SET character_set_connection = latin1;

但没有任何运气。

任何帮助将不胜感激

最佳答案

我找到了一个我想分享的解决方法:

由于 iconv 仅适用于 UTF8->ISO8859,这没有用,但您可以:

  • 使用 fileEncoding="utf8"将数据帧写入临时文件
  • 读一遍
  • 然后使用 dbWriteTable

    write.table(mydata,file="tmp.txt", fileEncoding ="utf8")
    mydata_utf8 <- read.table(file="tmp.txt",encoding="utf8") dbWriteTable(con,"new_table",mydata_utf8,overwrite=T)

关于mysql - 在 R 中将 ISO8859 数据写入 MySQL(错误 :"could not run statement: Invalid utf8 character string"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475451/

相关文章:

mysql - 如何找到不同配对行之间的天数?

mysql - 从 MySQL 数据库获取数据并将其传递给 jade 并使用 nodejs 访问它

r - 双重合并r中的两个数据帧

Python Scikit Learn GMM 结果与 R Mclust 不一致

r - 在 R 中向饼图添加标签...辐射 "spokes"?

Grails、Tomcat 7、REST 客户端和 UTF-8 字符编码

mysql - 有什么方法可以在删除索引之前检查它是否存在?

php - 如何安排事件每天给定时间截断mysql表数据?

C++检查utf8字符串是否包含指定字符

python - unicode解码的问题