1

可能重复:
今天,mysql_real_escape_string() 正在转义单引号和双引号

我知道单引号和反斜杠具有特殊含义,因此如果我们希望将它们解释为字面意思,则需要对其进行转义。

据我了解,mysql查询中不允许使用双引号来表示字符串(如果这个假设是正确的,这是转义它们的唯一原因吗?)我们应该使用单引号来表示字符串。

那么NULL呢?寻找具体的例子来理解为什么双引号和 NULL 需要被转义。

补充一下,我已经在 stackoverflow 上进行了搜索,我看到大多数示例都引用了我已经理解的单引号……但我需要了解双引号背后的原因,但我找不到任何示例……

4

2 回答 2

1

在默认模式下,MySQL 允许将字符串文字括在单引号或双引号中。

SELECT 'single', "double"

为了与其他 DBMS 兼容,并且以防万一 MySQL 模式设置为ANSI_QUOTES,大多数 SQL 作者使用单引号来指定字符串文字。使用双引号确实没有优势。(以及当有人在他们的 MySQL 服务器会话中更改变量时,为什么要以一种会导致查询“中断”的方式编写查询。)

所以,简短的回答是在所有情况下都不需要转义双引号,例如

SELECT 'Bob cried "Wheeeee!"'

在某些情况下,它们确实需要转义:

SELECT "Sue screamed \"Stop!\""

但在任何情况下转义双引号都没有坏处:

SELECT 'Bob cried \"Wheeeee!\"', "Sue screamed \"Stop!\""
于 2013-02-01T02:07:06.197 回答
1

从手册;The mysql client truncates quoted strings containing NUL characters if they are not escaped

如果要将二进制数据插入字符串列(例如 BLOB 列),则应使用转义序列表示某些字符。反斜杠 (“\”) 和用于引用字符串的引号字符必须进行转义。在某些客户端环境中,可能还需要转义 NUL 或 Control+Z。如果未转义,mysql 客户端会截断包含 NUL 字符的引用字符串,如果未转义,则可能会在 Windows 上将 Control+Z 用于 END-OF-FILE。对于代表这些字符中的每一个的转义序列,请参见表 9.1,“特殊字符转义序列”。

参考:http ://dev.mysql.com/doc/refman/5.0/en/string-literals.html#character-escape-sequences

而且你不需要转义双引号,但我认为这不是玩弦乐的正确方法。

# intead of this
INSERT INTO table (1, "John's cats")
# preferred by many programmer
INSERT INTO table (1, 'John\'s cats')
# but needs to escape here 
"INSERT INTO table (1, \"John's cats\")"
于 2013-02-01T02:20:11.000 回答