MySQL转义字符



我很难弄清楚如何在SQL(MySQL语法(中用另一个字符替换一个特殊字符。我已经尝试过REPLACE功能,但没有成功。我想做的是:

从此字符串:

"C:foobarfile.txt"

获取此字符串:

"C:\foo\bar\file.txt"

正如我所想的,这是一个XY问题。MySQL不需要路径中的任何内容。然而,它所需要的是它的输入要具有语法性。在输入中,字符串文字将反斜杠和另一个字符的序列解释为"转义",从而删除下一个字符中的特殊含义。由于反斜杠是一个特殊的字符,可以对其进行转义以消除其特殊意义:写入\以获得带有单个反斜杠的字符串。

这意味着,如果您在SQL命令中编写'C:\foo\bar\file.txt',MySQL将把它理解为字符串'C:foobarfile.txt'(就像我在您的问题下的评论中一样(。如果您编写'C:foobarfile.txt',MySQL会将反斜杠理解为删除字母fbf的特殊意义(而不是它们最初有任何意义(,并且它最终的字符串将是'C:foobarfile.txt'

一旦字符串在MySQL中,它是正确的,不需要替换。因此,您不能使用MySQL的REPLACE来准备字符串以输入到MySQL——现在已经太晚了。这有点像在婴儿吃过食物后,在婴儿的胃里打一拳来预先咀嚼食物,这样做不起作用,还会伤害婴儿。

相反,使用您用于与数据库接口的语言(您没有标记它,所以我无法向您提供详细信息(来正确处理字符串。许多语言都有可以正确转义字符串的函数,供MySQL使用。更好的是,了解准备好的语句和参数化查询,它们完全消除了显式转义的需要。

关于参数化查询,我可以推荐的最好的参考资料是Bobby Tables网站,它提供了多种语言的补救措施。

REPLACE函数应该为您完成这项工作-https://dev.mysql.com/doc/refman/8.0/en/replace.html.

如何将字符串传递到REPLACE函数中?