Как вставить значение, которое содержит апостроф (единственная цитата)?
-
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'
Апостроф, или единственная цитата, является специальным символом в 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 сохранила значение как '
.
Посмотрите на использование замены для дезинфекции входящих значений:
Вы хотите проверить на ''''
, и замените их, если они существуют в строке с ''''''
Чтобы избежать одинокой цитаты.
У Эдуффи была хорошая идея. Анкет Он только что получил это в своем примере кода. Либо в JavaScript, либо в SQLite вы можете заменить апостроф символом акцента.
Он (случайно я уверен) поместил символ акцента в качестве разделителя для струны вместо того, чтобы заменить апостроф в О'Бране. На самом деле это ужасно простое решение для большинства случаев.
Символ апострофа может быть вставлен, вызывая Девчонка функционировать с апострофом ASCII Соблюдение таблицы значение, 39. Значения строки могут затем объединяться вместе с Оператор Concatenate.
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'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("Joe","O'Brien")
Вместо этого используйте обратную тренажеру (на клавишу ~;
`O'Brien`