【问题标题】:R to MySQL throws the error "could not run statement: Invalid utf8mb4 character string"R to MySQL 抛出错误“无法运行语句:无效的 utf8mb4 字符串”
【发布时间】:2020-03-08 17:07:34
【问题描述】:

使用 R 将波兰语字符写入 MySQL 的最佳方法是什么?

我尝试将 R data.frame 发送到我的本地 MySQL 数据库。 data.frame 包含波兰语字符,如 ł。

mydb = dbConnect(MySQL(), user='root', password='1234', dbname='semstorm1', host='localhost')    
dbWriteTable(mydb,"dane3", dane2, append = T, row.names = F)

我得到了错误

无法运行语句:utf8mb4 字符串无效

这可能会有所帮助:

编辑

当我在 mysql 中使用 insert 时,它工作正常(代码示例如下)

INSERT INTO test1 VALUES ("AAAAŁłśśś")

当我通过 R dbsendQuery 插入数据时(代码如下) dbSendQuery(mydb, "插入 test1 VALUES ('asdllllłśżżż')") 这给了我 asdllll³³œ¿¿¿

当我 dbWriteTable(mydb,"dane3", dane2, append = T, row.names = F)

这给了我错误 无法运行语句:无效的 utf8mb4 字符串:'praca bia'

【问题讨论】:

  • 更自然的英文流。包括一个主题句。

标签: r rmysql utf8mb4


【解决方案1】:

您需要在几个地方确定所使用的编码。看来您使用的是 MySQL 8.0。

客户端和表的字符集不必相同。 MySQL 应该能够在 cp852 和 utf8mb4(又名 UTF-8)之间转换 Cyrillic。

stoke-l 在 cp852 中是十六进制 88,在 utf8mb4 中是十六进制 CB86。

如果客户端有“88”,但设置说客户端使用的是utf8mb4,那么就会出现这个错误信息。

这是我对 R 的粗略笔记,假设你想要 utf8/utf8mb4;如果客户端确实在使用,则更改为 cp952,例如“88”。

R/RStudio

工具 -> 全局选项 -> 代码 -> 保存并放置 UTF-8 rs

options(encoding = "UTF-8") 在我调用包的主脚本顶部似乎解决了包代码中包含非 ascii 字符的问题。

read_chunk(lines = readLines("TestSpanishText.R", encoding = "UTF-8")) (也是 file())

Character Encoding

另请参阅Trouble with UTF-8 characters; what I see is not what I stored 中的“最佳实践”,了解需要一致设置的事项清单。

从长远来看,最好只使用 utf8mb4,而留下过多的其他编码仅用于旧文本的初始导入。

【讨论】:

  • @SebastianSEO - 还有更多线索吗?任何十六进制转储来帮助我调试它?
猜你喜欢
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多