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 将把反斜杠理解为删除字母 f
、b
和 f
的特殊意义(并不是说它们在第一名),最后的字符串将是 'C:foobarfile.txt'
.
一旦字符串在 MySQL 中,它就是正确的,无需替换。因此,您不能使用 MySQL 的 REPLACE
来准备输入到 MySQL 的字符串 - 这样做已经太晚了。这有点像在宝宝吃完食物后用拳头打他的肚子让他预先咀嚼,这样是行不通的,而且会伤害宝宝。
而不是那样,使用您用来与数据库交互的语言(您没有标记它,所以我不能给您详细信息)来正确处理字符串。许多语言都有可以正确转义字符串供 MySQL 使用的函数。更好的是,了解准备好的语句和参数化查询,它们完全消除了显式转义的需要。
我可以推荐的关于参数化查询的最佳参考资料是 the Bobby Tables site。
我真的很难弄清楚如何用 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 将把反斜杠理解为删除字母 f
、b
和 f
的特殊意义(并不是说它们在第一名),最后的字符串将是 'C:foobarfile.txt'
.
一旦字符串在 MySQL 中,它就是正确的,无需替换。因此,您不能使用 MySQL 的 REPLACE
来准备输入到 MySQL 的字符串 - 这样做已经太晚了。这有点像在宝宝吃完食物后用拳头打他的肚子让他预先咀嚼,这样是行不通的,而且会伤害宝宝。
而不是那样,使用您用来与数据库交互的语言(您没有标记它,所以我不能给您详细信息)来正确处理字符串。许多语言都有可以正确转义字符串供 MySQL 使用的函数。更好的是,了解准备好的语句和参数化查询,它们完全消除了显式转义的需要。
我可以推荐的关于参数化查询的最佳参考资料是 the Bobby Tables site。