我正在使用R和RMySQL库连接到Mysql数据库。
我看到他们的逃避功能存在问题:
> dbEscapeStrings(con, "HE''LLO")
[1] "HE\\'\\'LLO"
这是错误的,应该是:"He\'\'LLO"
我是否必须使用其他函数来转义引号和双引号?
答案 0 :(得分:4)
我认为您将打印的R表示与dbEscapeStrings()
的实际结果混淆。在R \
中也需要进行转义。因此,如果您想要文字\
,则需要其中两个\\
。这是R在打印时显示转义字符串的方式,并解释了观察到的行为:
> foo <- dbEscapeStrings(con, "HE''LLO")
> foo
[1] "HE\\'\\'LLO"
但请注意,这只是在控制台的R中表示转义字符串的方式。如果我们将转义字符串cat()
或writeLines()
发送到控制台,而不是print()
- ing
> writeLines(foo)
HE\'\'LLO
我们发现它已被正确转义。后者是MySQL如何看待它。