在其中插入带撇号的值的正确SQL语法是什么?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
我一直收到错误,因为我认为O之后的撇号是该值的结束标记。
答案 0 :(得分:412)
在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 injection等。
答案 1 :(得分:31)
你只需加倍单引号......
insert into Person (First, Last)
values ('Joe', 'O''Brien')
答案 2 :(得分:18)
你需要逃避撇号。在T-SQL中,这是一个双撇号,因此您的insert
语句变为:
Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
答案 3 :(得分:14)
因为单引号用于指示字符串的开头和结尾;你需要逃脱它。
简短的回答是使用两个单引号 - ''
- 以便SQL数据库将值存储为'
。
使用REPLACE来清理传入的值:
您想要检查''''
,如果它们存在于''''''
的字符串中,则替换它们以逃避单独的单引号。
答案 4 :(得分:3)
eduffy had a good idea。他只是在他的代码示例中得到了它。无论是在JavaScript中还是在SQLite中,您都可以用重音符号替换撇号。
他(不小心我确定)将重音符号作为字符串的分隔符,而不是替换奥布莱恩的撇号。对于大多数情况来说,这实际上是一个非常简单的解决方案。
答案 5 :(得分:3)
可以通过使用撇号的CHAR值39调用ASCII table lookup函数来插入撇号字符。然后可以将字符串值与concatenate operator连接在一起。
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
答案 6 :(得分:2)
转义撇号的另一种方法是编写字符串文字:
insert into Person (First, Last) values (q'[Joe]', q'[O'Brien]')
这是一种更好的方法,因为:
想象一下,您有一个包含1000个要上传到数据库的名称的Excel列表。您可以简单地创建一个公式以使用单元格内容生成1000条INSERT语句,而不用手动寻找撇号。
它也适用于其他转义字符。例如,加载一个Regex模式值,即^(*)(P | N)?(*)|(*)((<|>)\ d \ d?)?(*)|()(( (?i](in | not in)(?-i)?(('[^'] +')(,?'[^'] +')))))?(*)$放入一张桌子。
答案 7 :(得分:1)
单引号通过将它们加倍来转义,
以下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
答案 8 :(得分:0)
在值周围使用双引号。
insert into Person (First, Last) Values("Joe","O'Brien")
答案 9 :(得分:0)
这是我的数据作为 API 响应的样子,我想将其存储在 MYSQL 数据库中。它包含引号、HTML 代码等。
示例:-
{
rewardName: "Cabela's eGiftCard $25.00",
shortDescription: '<p>adidas gift cards can be redeemed in over 150 adidas Sport Performance, adidas Originals, or adidas Outlet stores in the US, as well as online at <a href="http://adidas.com/">adidas.com</a>.</p>
terms: '<p>adidas Gift Cards may be redeemed for merchandise on <a href="http://adidas.com/">adidas.com</a> and in adidas Sport Performance, adidas Originals, and adidas Outlet stores in the United States.'
}
解决方案
CREATE TABLE `brand` (
`reward_name` varchar(2048),
`short_description` varchar(2048),
`terms` varchar(2048),
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
插入时,接着JSON.stringify()
let brandDetails= {
rewardName: JSON.stringify(obj.rewardName),
shortDescription: JSON.stringify(obj.shortDescription),
term: JSON.stringify(obj.term),
}
上面是JSON对象,下面是向MySQL插入数据的SQL查询。
let query = `INSERT INTO brand (reward_name, short_description, terms)
VALUES (${brandDetails.rewardName},
(${brandDetails.shortDescription}, ${brandDetails.terms})`;
它的工作....
答案 10 :(得分:-2)
使用反引号(在〜键上)代替;
`O'Brien`