使用RMySQL dbWriteTable从R写入MySQL时出现多字节字符串错误

时间:2014-02-11 14:55:11

标签: mysql r

每次我尝试在R 3.0中使用RMySQL包中的dbWriteTable函数时(以及之前的R 2.15中)我收到此错误"Erreur dans tolower(avail) : chaîne de charactères multioctets incorrecte 45",这意味着类似"Error in tolower(avail) : Multibyte string error X".而我找不到任何解决方案,我甚至不知道这个错误产生的位置。

以下是事实:我在Mac OS X 10.9.1上工作但在10.8.x上有这个错误,我在Debian上也有这个错误。 MySQL和R都在同一台机器上(或者不是,它没有任何区别)。出于测试目的,我在表中创建了只有数值,我用RMySQL读取它的内容(没问题)然后尝试用dbWriteTable重新注入MySQL,并且繁荣。这是R脚本:

#!/usr/bin/Rscript
library(DBI)
library(RMySQL)

conn <- dbConnect("MySQL", user="userr", password="passworrd", dbname="dbtest")

res <- dbSendQuery(conn, statement = paste("SELECT * FROM testable"))
input <- fetch(res, n = -1)

dbWriteTable(conn, "testable2", input, row.names = T, overwrite = FALSE, append = T)  

dbDisconnect(conn)         

表格内容为:

  id testval
1  1   76
2  2   47417

用户拥有数据库。获取工作正常但不是dbWriteTable。错误可能与某些字符编码有关,但我无法弄清楚是什么。

我正在使用R版本3.0.2(2013-09-25),RMySQL 0.9-3,DBI 0.2-7和MySQL 5.6.14,Mac OS X 10.9.1。
我在Debian机器上托管的Rstudio服务器上遇到了同样的问题。

Debian上的Mysql(不知道在Mac上哪里可以找到这些)日志说:

- 140211 14:04:15      24 Connect   userr@xxx.xxx.xxx.xxx on dbtest
- 140211 14:04:32      24 Query show tables
- 140211 14:04:52      24 Quit   

所以,我谦虚的愿望是有人可以让我走上正轨!

迪迪埃

1 个答案:

答案 0 :(得分:1)

解决方案:这是数据库中的整理问题;我创建了另一个带有编码UTF-8的数据库(就像第一个一样),但这次使用了排序规则utf8_general_ci而不是utf8_bin,并且它完美地工作了。很长的问题,简短的回答。