怎么插入一个值包含一撇(single quote)?
-
19-09-2019 - |
题
什么是正确的SQL法插入一个值有一撇呢?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
我得到一个错误因为我觉得撇在O是的结束标签的值。
解决方案
逃脱您的SQL中的撇号(即双重报价字符):
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
right here
同样适用于选择查询:
SELECT First, Last FROM Person WHERE Last = 'O''Brien'
Apostrophe或单语言是SQL中的一个特殊字符,它指定字符串数据的开始和结尾。这意味着将其用作文字字符串数据的一部分,您需要 escape
特殊角色。使用单语言,这通常是通过加倍的报价来完成的。 (两个单语字符,而不是双引号,而不是单个报价。)
笔记: :您只需要担心此问题时通过RAW SQL接口手动编辑数据,因为在开发和测试之外编写查询应该是罕见的。在代码中,有一些技术和框架(取决于您的堆栈)来负责逃避特殊角色, SQL注入, , ETC。
其他提示
您只需要加倍的引号...
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中,您可以用重音符号替换撇号。
他(我敢肯定)将重音符号作为字符串的定界符,而不是在奥布莱恩(O'Brian)中取代撇号。实际上,对于大多数情况,这是一个非常简单的解决方案。
单语引用通过加倍而逃脱,
以下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
在值周围使用双引号。
insert into Person (First, Last) Values("Joe","O'Brien")
代替使用回压(在〜键上);
`O'Brien`
不隶属于 StackOverflow