如何插入包含撇号(单引号)的值?
什么是正确的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`