如何在MySql中转义撇号(')?

use*_*951 133 mysql escaping

MySQL文档说,它应该是\'.但是,scite和mysql都显示''有效.我看到了它,它的工作原理.我该怎么办?

Jim*_*unt 169

你引用的MySQL文档实际上比你提到的要多一点.它还说,

A" '"加引号的字符串内" '"可以写为" ''".

(另外,您链接到表8.1MySQL 5.0版本.特殊字符转义序列,当前版本是5.6 - 但是当前的表8.1.特殊字符转义序列看起来非常相似.)

我认为关于backslash_quote (string)参数Postgres注释是提供信息的:

这可以控制引号是否可以用\'字符串文字表示.表示引号的首选SQL标准方法是将它加倍(''),但PostgreSQL历来也接受了\'.但是,使用\'会产生安全风险......

这告诉我,使用加倍的单引号字符比使用反斜杠逃避单引号更好的整体和长期选择.

现在,如果您还想添加语言选择,SQL数据库的选择及其非标准怪癖,并选择查询框架,那么您最终可能会选择不同的选择.您没有提供有关约束的大量信息.


Jon*_*ler 36

标准SQL使用双引号; MySQL必须接受合理的合规性.

'He said, "Don''t!"'
Run Code Online (Sandbox Code Playgroud)


小智 9

我相信user2087510的意思是:

name = 'something'
name = name.replace("'", "\\'")
Run Code Online (Sandbox Code Playgroud)

我也成功地使用了它.

  • 为我工作,而那些最佳答案却没有 (3认同)
  • 为什么 \\' 而不是 \' ? (3认同)
  • 可能的安全问题。如果字符串已经包含\',则可以获得sql注入,因此您插入一个\,它现在在字符串中作为\\'将终止该字符串。使用 name.replace("'", "''") 代替 (2认同)

Rob*_*cha 9

我知道有三种方式。第一个不是最漂亮的,第二个是大多数编程语言中的常用方法:

  1. 使用另一个单引号: 'I mustn''t sin!'
  2. \在单引号前使用转义字符''I mustn\'t sin!'
  3. 使用双引号将字符串而不是单引号括起来: "I mustn't sin!"


小智 6

下面是一个例子:

SELECT * FROM pubs WHERE name LIKE "%John's%"
Run Code Online (Sandbox Code Playgroud)

只需使用双引号将单引号括起来即可。

如果您坚持使用单引号(并且需要对字符进行转义):

SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Run Code Online (Sandbox Code Playgroud)


MRR*_*aja 6

只写两次''代替'我的意思'