2012-03-07 129 views

回答

129

你居然引用MySQL的文件说,一点点比你更不在话下。它还说,

A“'”与“'”援引一个字符串内可以写成“''”。

(此外,您链接到MySQL 5.0 version of Table 8.1. Special Character Escape Sequences,而当前版本是5.6 - 但目前Table 8.1. Special Character Escape Sequences看起来很相似。)

我觉得Postgres note on the backslash_quote (string) parameter是资料:

该控制是否可以用字符串文字中的\'表示引号。表示引号的首选SQL标准方式是将其加倍(''),但PostgreSQL历史上也接受\'。然而,使用\'造成安全隐患......

那对我说,使用两个单引号字符是一个整体更好的和长期的选择,而不是用一个反斜杠逃逸单引号。

现在,如果您还想添加语言选择,SQL数据库选择及其非标准怪癖,并选择查询框架,那么您可能会选择不同的选择。您不会提供有关您的限制的更多信息。

+2

+1我想使用标准。 – 2012-03-07 06:38:17

30

标准SQL使用加倍引号; MySQL必须接受合理的合规性。

'He said, "Don''t!"' 
+0

+1。它在哪里说它应该被''转义'而不是http://dev.mysql.com/doc/refman/5.0/en/string-literals.html#character-escape-sequences – 2012-03-07 06:19:36

+0

它说“可能”而不是'should',但是信息在那里(在表格下面):_有几种方法可以在字符串中包含引号字符: 引用“'”'“引用的字符串中的”''“可以写为” ' '''”。 用“'”'“引用的字符串中的”'“'”可以写成“'”“'”。 在转义字符前面加上转义字符(“'\'”)._ – 2014-04-26 17:18:14

+1

这是通过加倍转义撇号的最佳方法。 – 2016-06-02 07:50:48

2

下面是一个例子:

SELECT * FROM pubs WHERE name LIKE "%John's%" 

只要用双引号括单引号。

如果您在使用单引号(和需要逃脱字符)坚持:

SELECT * FROM pubs WHERE name LIKE '%John\'s%' 
-5

这一个工作:

name = 'John O'Brien' 
name = name.replace("\'", "\\\'") 
+0

很难相信,因为它什么都不做。 – EJP 2013-09-23 01:09:17

+0

当user2087510发布它时,替换中的第二个斜杠无法显示。我刚刚提交了一个修正的修改。 – 2014-07-22 02:36:40

6

我相信user2087510的意思是:

name = 'something' 
name = name.replace("'", "\\'") 

我还成功使用此。

+0

谢谢!这对我有用。 – Harsha 2014-10-13 16:46:29

+0

为我工作,而那些最佳答案没有 – Jared 2015-07-07 21:02:38

+0

为什么\''而不是\'? – 2015-11-17 15:24:31

5

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

+1

两次使用撇号代替一个 – MRRaja 2015-01-08 12:06:10

3

有三种方式我所知道的。第一不是最漂亮的,第二个是在大多数编程语言中常用的方法:'I mustn\'t sin!'

  • 使用双:单引号''I mustn''t sin!'
  • 使用转义字符\

    1. 使用另一个单引号引号中的字符串,而不是单引号:"I mustn't sin!"
  • 0

    替换字符串

    value = value.replace(/'/g, "\\'"); 
    

    其中value是要存储在数据库中的字符串。

    此外,

    NPM包对于这一点,你可以看看它

    https://www.npmjs.com/package/mysql-apostrophe

    +0

    尽管此链接可能回答此问题,但最好在此处包含答案的基本部分,并提供参考。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17378096) – 2017-09-19 11:24:06

    +0

    请不要只是发布一些工具或库作为答案。至少在答案中演示[它如何解决问题](http://meta.stackoverflow.com/a/251605)。 – 2017-09-19 11:24:19

    +0

    这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/17378096) – 2017-09-19 11:30:31

    0

    我认为,如果你有撇号的任何数据点,你可以前加一个撇号撇号

    例如。 “这是约翰的地方”

    这里MySQL假设两句话“这是约翰的地方”

    你可以把“这是约翰的地方”。我认为它应该以这种方式工作。