Как вставить значение, которое содержит апостроф (единственная цитата)?

StackOverflow https://stackoverflow.com/questions/1912095

  •  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`
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top