我有一张test(id,name)号桌.

我需要插入像:user's log'my user'customer's这样的值.

 insert into test values (1,'user's log');
 insert into test values (2,''my users'');
 insert into test values (3,'customer's');

如果我运行上述任何语句,我就会出错.

如果有任何正确的方法,请分享.我不想要任何事先准备好的声明.

可以使用sql转义机制吗?

推荐答案

字符串常量

通过将单引号加倍来避开'->;''是标准的方法,当然有效:

'user's log'     -- incorrect syntax (unbalanced quote)
'user''s log'

请注意,纯单引号(ASCII/UTF-8代码39)不是反勾号`,它在Postgres中没有特殊用途(与某些其他RDBMS不同),也不是双引号",用于标识符.

在旧版本中,或者如果仍然使用standard_conforming_strings = off运行,或者通常,如果在字符串前面加E以声明Posix escape string syntax,也可以使用反斜杠\转义:

E'user\'s log'

Backslash itself is escaped with another backslash. But that's generally not preferable.
If you have to deal with many single quotes or multiple layers of escaping, you can avoid quoting hell in PostgreSQL with dollar-quoted strings:

'escape '' with '''''
$$escape ' with ''$$

为了进一步避免美元报价之间的混淆,请为每对货币添加一个唯一的标记:

$token$escape ' with ''$token$

可以嵌套任意数量的级别:

$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$

请注意,$个字符在您的客户端软件中是否具有特殊意义.此外,你可能还得逃离它.对于标准的PostgreSQL客户机,如psql或pgAdmin,情况并非如此.

这对于编写plpgsql函数或特殊SQL命令非常有用.然而,当用户输入是可能的时,它不能减轻使用预先准备好的语句或其他方法来防止应用程序中的SQL注入的需要.@Craig's answer还有更多.更多详情:

博士后的价值观

在处理数据库中的值时,有几个有用的函数可以正确引用字符串:

  • quote_literal() or quote_nullable()-后者为空输入输出字符串NULL.(在需要获取有效SQL identifiers的地方,还有quote_ident()double-quote个字符串.)
  • format() with the format specifier %L is equivalent to quote_nullable().
    Like: format('%L', string_var)
  • concat() or concat_ws()通常不适用于此目的,因为它们不适用于not转义嵌套的单引号和反斜杠.

Sql相关问答推荐

需要解决办法通过传递过程参数而不是声明表行类型来声明表类型

基于列对多行求和的查询

在Oracle中,如何删除具有特定值的行,仅当它是重复的行?

仅当交叉应用返回单值时才更新记录

数据库SQL-CTE命名空间(错误?)使用临时视图

了解多个分组集

在SELECT中将日期格式转换为双周时段

合并分层表SQL中的第一个非空、变化的空位置

根据时间、状态和相关行在PostgreSQL中的存在来删除行

如何使子查询在UPDATE语句期间获得最新更新

根据日期 Select ID 的上一条记录

在同一列上迭代时计算持续时间

除了风格之外,还有什么理由更喜欢简单的CASE WHEN而不是搜索呢?

试图找到两个身份列表的交集(列表的长度不同),但获取列 id 不明确?

如何用SQL组合客户拥有的产品

在 Oracle 21c 中透视文本值

在 PostgreSQL 中,如何让多个判断约束引用相同的值数组?

Postgres数据库维护:基于GROUP BY删除旧记录

Postgresql 需要一个查询,为我提供所有没有具有特定状态值的子元素的父母

MIN MAX 值与条件绑定