【发布时间】:2017-11-15 16:11:38
【问题描述】:
考虑一下:
> scr<-paste("INSERT INTO ques2_log (freeze_time) value(",sQuote(now()),")")
> scr
#> "INSERT INTO ques2_log (freeze_time) value( ‘2017-06-13 23:46:16’ )"
如果我们将这个简单的 SQL 脚本输入 MySQL 数据库,如下所示:
dbExecute(db,scr1)
MySQL DB 抛出以下错误:Error in .local(conn, statement, ...) : could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '��2017-06-13 23:44:13’ )' at line 1
我已经通过手动输入测试了 SQL 脚本,它可以工作。
也很明显,单引号是意外字符。
我查阅了一些关于字符编码的在线文章并尝试了
enc2utf8(scr) 在通过 RMySQL 命令输入数据库之前。没有效果。同样的错误。
我还阅读了this 并跑了
ALTER DATABASE ques2_log CHARACTER SET utf8 COLLATE utf8_general_ci;
但错误仍然存在。
【问题讨论】:
-
您使用
sQuote而不仅仅是普通的旧单'有什么原因吗?通常sQuote用于格式化输出以显示在屏幕上,这不是您在这里所做的。 -
我正在使用 sQuote 将函数 now() 的输出用单引号括起来。否则很难将函数的输出用单引号括起来,我猜。
-
你试过
paste0("'",date(),"'")吗? -
是的!那行得通。我从没想过 sQuote() 和 ' 会为同一个输出字符生成两个不同的字符代码!请将其转换为@joran 的答案,我会接受。谢谢。