我很难弄清楚如何用SQL(MySQL语法)中的另一个字符替换特殊字符。我已经尝试过使用REPLACE函数,但没有成功。我想做的是:
通过此字符串:
"C:\foo\bar\file.txt"
获取此字符串:
"C:\\foo\\bar\\file.txt"
答案 0 :(得分:0)
REPLACE函数应该为您完成工作-https://dev.mysql.com/doc/refman/8.0/en/replace.html。
如何将字符串传递给REPLACE函数?
答案 1 :(得分:0)
我认为-这是XY problem。 MySQL不需要任何路径。它确实需要的是语法输入。在输入中,字符串文字将反斜杠和另一个字符的序列解释为“转义”,这从下一个字符中删除了特殊含义。由于反斜杠是一个特殊字符,因此可以对其进行转义以删除其特殊含义:可以写\\
来获得带有单个反斜杠的字符串。
这是什么意思,如果您在SQL命令中编写'C:\\foo\\bar\\file.txt'
,MySQL会将其理解为字符串'C:\foo\bar\file.txt'
(就像我在问题中的注释中一样)。如果您写'C:\foo\bar\file.txt'
,MySQL将把反斜杠理解为删除了字母f
,b
和f
(不是一开始就没有特殊含义)的特殊含义,最终将使用的字符串为'C:foobarfile.txt'
。
一旦字符串在MySQL内部,它是正确的,不需要替换。因此,您不能使用MySQL的REPLACE
来准备要输入到MySQL的字符串-为时已晚。这有点像在婴儿已经吃完之后在肚子上猛击它以预先咀嚼食物,那样行不通,并且会伤害婴儿。
相反,请使用用于与数据库进行交互的语言(您没有对其进行标记,因此我无法向您提供详细信息)来正确处理字符串。许多语言都具有可以正确地转义字符串以供MySQL使用的函数。更好的是,了解准备好的语句和参数化查询,这完全消除了显式转义的需要。
我推荐的关于参数化查询的最佳参考,其中有针对多种语言的补救措施,是the Bobby Tables site。