首页 > 解决方案 > R to MySQL 抛出错误“无法运行语句:无效的 utf8mb4 字符串”

问题描述

使用 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, "insert into test1 VALUES ('asdllllłłśżżż')") 这给了我 asdllll³³œ¿¿¿

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

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

标签: rrmysqlutf8mb4

解决方案


您需要在几个地方建立正在使用的编码。看来您使用的是 MySQL 8.0。

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

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

如果客户端有“88”,但设置说客户端正在使用 utf8mb4,那么就会出现该错误消息。

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

R / R工作室

工具 -> 全局选项 -> 代码 -> 保存并放置 UTF-8 rs <- dbSendQuery(con, 'set character set "utf8"') rs <- dbSendQuery(con, 'SET NAMES utf8')

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

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

字符编码

另请参阅“ UTF-8 字符问题”中的“最佳实践” ;我看到的不是我为需要一致设置的事物清单而存储的内容。

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


推荐阅读