插入带有撇号的值的正确SQL语法是什么?

Insert into Person
  (First, Last)
Values
  'Joe',
  'O'Brien'

我一直得到一个错误,因为我认为O后面的撇号是值的结束标记。


当前回答

在SQL中转义撇号(即双引号字符):

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

同样适用于SELECT查询:

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

撇号或单引号是SQL中的一个特殊字符,用于指定字符串数据的开始和结束。这意味着要使用它作为你的字面值字符串数据的一部分,你需要转义特殊字符。与一个单一的报价,这通常是通过加倍你的报价。(两个单引号字符,不是双引号而不是单引号。)

注意:只有在通过原始SQL接口手动编辑数据时才应该担心这个问题,因为在开发和测试之外编写查询应该是很少发生的。在代码中,有一些技术和框架(取决于你的堆栈)负责转义特殊字符、SQL注入等。

其他回答

在SQL中转义撇号(即双引号字符):

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

同样适用于SELECT查询:

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

撇号或单引号是SQL中的一个特殊字符,用于指定字符串数据的开始和结束。这意味着要使用它作为你的字面值字符串数据的一部分,你需要转义特殊字符。与一个单一的报价,这通常是通过加倍你的报价。(两个单引号字符,不是双引号而不是单引号。)

注意:只有在通过原始SQL接口手动编辑数据时才应该担心这个问题,因为在开发和测试之外编写查询应该是很少发生的。在代码中,有一些技术和框架(取决于你的堆栈)负责转义特殊字符、SQL注入等。

在值周围使用双引号。

insert into Person (First, Last) Values("Joe","O'Brien")

因为单引号用于表示字符串的开始和结束;你需要逃离它。

简单的回答是使用两个单引号- " -以便SQL数据库将值存储为'。

看一下使用REPLACE来清除传入值:

甲骨文取代 SQL Server REPLACE MySQL取代 PostgreSQL取代

您希望检查'''',如果它们存在于字符串中,则将它们替换为'''''',以便转义单个单引号。

另一种转义撇号的方法是写一个字符串字面量:

insert into Person (First, Last) values (q'[Joe]', q'[O'Brien]')

这是一个更好的方法,因为:

假设您有一个包含1000个名称的Excel列表,您希望将其上传到数据库。您可以简单地创建一个公式,用单元格内容生成1000条INSERT语句,而不是手动查找撇号。 它也适用于其他转义字符。例如加载一个Regex模式值,即^(*)(P|N)?(*)|(*)((<|>)\d\d?)?( *)|( )(((? 我)(在|不是)(? -我 ) ?(('[^']+')(, ?'[^']+'))))?(*)$到表中。

Eduffy有个好主意。他只是在代码示例中搞反了。在JavaScript或SQLite中,都可以用重音符号替换撇号。

他(我确信是偶然地)将重音符号作为字符串的分隔符,而不是替换O'Brian中的撇号。事实上,对于大多数情况,这是一个非常简单的解决方案。