如何插入包含撇号(单引号)的值?

什么是正确的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中的一个特殊字符,用于指定string数据的开始和结束。 这意味着要将它用作字面string数据的一部分,您需要escape特殊字符。 用单引号这通常是通过加倍你的报价来完成的。 (两个单引号字符,不是双引号而不是单引号)。

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

你只需要在单引号中加倍

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

你需要逃避撇号。 在T-SQL中,这是一个双撇号,所以你的insert语句变成:

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

由于单引号用于指示string的开始和结束, 你需要逃避它。

简短的答案是使用两个单引号 – '' – 为了让SQL数据库将值存储为'

看看使用REPLACE来清理传入的值:

  • Oracle REPLACE
  • SQL Server REPLACE
  • MySQL REPLACE
  • PostgreSQLreplace

你想检查'''' ,如果它们存在于''''''的string中以replace它们,以便逃离唯一的单引号。

eduffy有一个好主意 。 他只是在代码示例中倒过来了。 无论是在JavaScript或SQLite中,您都可以用重音符号replace撇号。

他(不小心我确定)把重音符号作为string的分隔符,而不是replaceO'Brian中的撇号。 实际上这对大多数情况来说是一个非常简单的解决scheme。

使用撇号的ASCII表查找值39来调用CHAR函数可以插入撇号字符。然后可以将string值与连接运算符连接在一起。

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

在值的周围使用双引号。

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

使用倒退(在〜键上);

 `O'Brien`