Как вставить значение, содержащее Апостроф (одинарную кавычку)?

каков правильный синтаксис SQL для вставки значения с апострофом в нем?

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

Я продолжаю получать ошибку, поскольку я думаю, что Апостроф после O-это конечный тег для значения.

9 ответов


избежать Апострофа (т. е. удвоить символ одинарной кавычки) в вашем SQL:

INSERT INTO Person
    (First, Last)
VALUES
    ('Joe', 'O''Brien')
              /\
          right here  

то же самое относится к SELECT queries:

SELECT First, Last FROM Person WHERE Last = 'O''Brien'

Апостроф или одинарная кавычка-это специальный символ в 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 хранила значение как '.

посмотрите на использование REPLACE для очистки входящих значений:

вы хотите проверить для '''' и замените их, если они существуют в строку с '''''' для того, чтобы избежать одинокой одиночной цитаты.


у эдуффи была хорошая идея. Он просто получил его назад в своем примере кода. Либо в JavaScript, либо в SQLite вы можете заменить Апостроф символом акцента.

Он (случайно, я уверен) поместил символ акцента в качестве разделителя строки вместо замены Апострофа в O'Brian. На самом деле это очень простое решение для большинства случаев.


символ Апострофа можно вставить, вызвав CHAR функция с апострофом ASCII таблица поиска value, 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

вместо этого используйте backtick (на клавише~);

`O'Brien`