什么是正确的SQL语法插入与它撇号的值?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
我不断收到一个错误,因为我认为将O后的撇号是该值的结束标记。
什么是正确的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特殊字符指定字符串数据的开始和结束。 这意味着,用它作为你的文字字符串数据的一部分,你需要escape
的特殊字符。 用单引号这通常是由您的报价翻倍来实现。 (两个单引号字符,而不是双引号,而不是一个单引号。)
注意 :您应该永远只担心这个问题,因为开发和测试之外编写查询应该是一个罕见的现象,当你手动编辑通过原始SQL接口数据。 在代码中有一些技术和框架(取决于您的堆栈),其采取的转义特殊字符,照顾SQL注入等。
你只需要对单引号加倍...
insert into Person (First, Last)
values ('Joe', 'O''Brien')
你需要躲避撇号。 在T-SQL这是一部带有双撇号,所以你insert
语句将变成:
Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
因为一个单引号用于指示串的开始和结束; 你需要逃避它。
简短的回答是使用两个单引号- ''
-为了一个SQL数据库来存储值'
。
看看使用更换消毒传入值:
你要检查''''
,并替换他们,如果他们在字符串中存在与''''''
为了逃避孤独的单引号。
eduffy有一个好主意 。 他只是在自己的代码示例得到它倒退。 无论是在JavaScript或SQLite中,你可以替换重音符号的撇号。
他(无意中我相信)放置重音符号作为分隔符的字符串,而不是在奥布赖恩替换撇号。 这其实是大多数情况下,简单得不得了的解决方案。
撇号字符可以通过调用被插入CHAR用撇号的功能ASCII查表值,39.字符串值然后可以连同串联连接操作符 。
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
周围使用值双引号。
insert into Person (First, Last) Values("Joe","O'Brien")
单引号用起来加倍逃脱 ,
下面的SQL阐释了此功能。
declare @person TABLE (
[First] nvarchar(200),
[Last] nvarchar(200)
)
insert into @person
(First, Last)
values
('Joe', 'O''Brien')
select * from @person
First | Last
===================
Joe | O'Brien
使用反引号(在〜键)代替;
`O'Brien`