我最近惊讶地发现两个单引号是在Postgres和其他SQL数据库中转义单引号(作为使用反斜杠的替代方法)的有效方法。我正在阅读的一些文档实际上将其称为" normal"逃避单一报价的方法。
-- Using two single quotes
SELECT FROM "users" WHERE "users"."email" = 'o''keefe@email.com'
-- Using a backslash
SELECT FROM "users" WHERE "users"."email" = 'o\'keefe@email.com'
我希望有人可以提供一些关于这种逃避形式的起源的背景,以及它相对于反斜杠形式的任何优点或缺点。
答案 0 :(得分:2)
双单引号是将单引号放入SQL字符串的ANSI标准方法。
反斜杠是一种常见的约定,特别是在基于Unix的机器上,因此许多数据库也支持它。
我更喜欢双单引号,因为它是ANSI标准。在Windows和Unix盒之间进行操作时,我也会对反斜杠感到困惑。
答案 1 :(得分:2)
根据this ANSI标准,指定使用反斜杠字符\
来转义单个'
或双"
引号无效。因此,出于便携性原因,我会使用双引号。
答案 2 :(得分:2)
postgres支持各种方式:
标准
t=# select 'the quote is ''';
?column?
----------------
the quote is '
(1 row)
反斜杠需要E
来识别转义,看看
https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE
PostgreSQL也接受“转义”字符串常量,这是一个 SQL标准的扩展。指定了转义字符串常量 在开幕前写下字母E(大写或小写) 单引号,例如E'foo'。
t=# select e'the quote is \'';
?column?
----------------
the quote is '
(1 row)
最后是最有效且完全非标准的美元报价,请看https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING
虽然通常是指定字符串常量的标准语法 方便,可以很难理解所需的字符串 包含许多单引号或反斜杠,因为每个都必须 加倍。为了在这种情况下允许更可读的查询, PostgreSQL提供了另一种称为“美元引用”的方式来编写 字符串常量。美元引用的字符串常量由一美元组成 sign($),一个零或多个字符的可选“标记”,另一个美元 符号,构成字符串的任意字符序列 内容,美元符号,开始这个美元报价的相同标签,以及 美元符号。
t=# select $dollar_quotes$the quote is '$dollar_quotes$;
?column?
----------------
the quote is '
(1 row)