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

插入带有撇号的值的正确SQL语法是什么?

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

我一直得到一个错误,因为我认为O后面的撇号是值的结束标记。

1030923 次浏览

你需要省略撇号。在t - sql中,这是一个双撇号,所以你的insert语句变成:

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

使用反勾号(在~键上)代替;

`O'Brien`

在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')

因为单引号用于表示字符串的开始和结束;你需要逃离它。

简单的回答是使用两个单引号——''——以便SQL数据库将值存储为'

看一下使用REPLACE来清除传入值:

你想检查'''',如果字符串中存在'''''',就用''''''替换它们,以便转义单引号。

Eduffy有个好主意。他只是在代码示例中搞反了。在JavaScript或SQLite中,都可以用重音符号替换撇号。

他(我确信是偶然地)将重音符号作为字符串的分隔符,而不是替换O'Brian中的撇号。事实上,对于大多数情况,这是一个非常简单的解决方案。

可以通过调用带有撇号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

另一种转义撇号的方法是写一个字符串字面量:

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

这是一个更好的方法,因为:

  1. 假设你有一个包含1000个名字的Excel列表,你想要上传到你的数据库。您可以简单地创建一个公式,用单元格内容生成1000条INSERT语句,而不是手动查找撇号。

  2. 它也适用于其他转义字符。例如加载一个Regex模式值,即^(*)(P|N)?(*)|(*)((<|>)\d\d?)(*)|(__abc0)))?(*)$到表中。

这就是我的数据作为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&nbsp;<a href="http://adidas.com/">adidas.com</a>.</p>


terms: '<p>adidas Gift Cards may be redeemed for merchandise on&nbsp;<a href="http://adidas.com/">adidas.com</a>&nbsp;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;

插入时,In跟随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})`;

它的工作…

enter image description here

如果它是静态文本,你可以使用two single quote来代替,如下所示:

DEC @text = 'Khabir''s Account'

Khabir后面有两个单引号('')

如果你的文本不是静态的,它被传递在存储过程参数,那么

REPLACE(@text, '''', '')