r - 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'
解决方案
您需要在几个地方建立正在使用的编码。看来您使用的是 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,而留下过多的其他编码仅用于旧文本的初始导入。
推荐阅读
- google-cloud-platform - 列出 Google Cloud 上提供的所有机器类型
- c# - 如何在 SQL Server 2005 和 SQL Server 2019 之间使用 C# 监控应用程序
- android - 使用 Retrofit + Kotlin Flow 处理错误的优雅方式
- python - Mongoengine:使用 __not__contains 但使用列表而不是字符串进行查询
- javascript - D3.js Canvas Spectrogram - 白线和图像拉伸
- perl - 如何获取当前运行的 Perl 脚本的名称?
- python - Python请求无法下载文件
- python - 用于触摸屏的 PyAutoGUI
- php - 更新数据库列加一(列+1)时出错
- java - 我怎样才能在这里实现一些尝试