MySQL 转义字符

MySQL Escape characters

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

来自这个字符串:

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

获取这个字符串:

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

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

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

正如我所想 - 这是一个 XY problem。 MySQL 不需要路径中的任何内容。但它确实需要的是它的输入是句法的。在输入中,字符串文字将反斜杠和另一个字符的序列解释为 "escape",这从下一个字符中删除了特殊含义。由于反斜杠是一个特殊的字符,它可以被转义以消除它的特殊意义:写 \ 得到一个带有单个反斜杠的字符串。

这意味着,如果您在 SQL 命令中写入 'C:\foo\bar\file.txt',MySQL 会将其理解为字符串 'C:\foo\bar\file.txt'(就像我在您的评论下题)。如果你写 'C:\foo\bar\file.txt',MySQL 将把反斜杠理解为删除字母 fbf 的特殊意义(并不是说它们在第一名),最后的字符串将是 'C:foobarfile.txt'.

一旦字符串在 MySQL 中,它就是正确的,无需替换。因此,您不能使用 MySQL 的 REPLACE 来准备输入到 MySQL 的字符串 - 这样做已经太晚了。这有点像在宝宝吃完食物后用拳头打他的肚子让他预先咀嚼,这样是行不通的,而且会伤害宝宝。

而不是那样,使用您用来与数据库交互的语言(您没有标记它,所以我不能给您详细信息)来正确处理字符串。许多语言都有可以正确转义字符串供 MySQL 使用的函数。更好的是,了解准备好的语句和参数化查询,它们完全消除了显式转义的需要。

我可以推荐的关于参数化查询的最佳参考资料是 the Bobby Tables site