Question

Quelle est la syntaxe SQL correcte pour insérer une valeur avec une apostrophe?

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

Je continue à obtenir une erreur car je pense que l'apostrophe après l'O est la balise de fin de la valeur.

Était-ce utile?

La solution

Échappez à l'apostrophe (c'est-à-dire le double du caractère de devis) dans votre SQL:

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

Il en va de même pour sélectionner les requêtes:

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

L'apostrophe, ou citation unique, est un caractère spécial de SQL qui spécifie le début et la fin des données de chaîne. Cela signifie que pour l'utiliser dans le cadre de vos données de chaîne littérales, vous devez escape le caractère spécial. Avec une seule citation, cela est généralement accompli en doubler votre devis. (Deux caractères de citation unique, pas à double qualité au lieu d'une seule citation.)

Noter: Vous ne devez vous soucier de ce problème que lorsque vous modifiez manuellement les données via une interface SQL brute, car la rédaction de requêtes en dehors du développement et des tests devrait être un événement rare. Dans le code, il existe des techniques et des frameworks (selon votre pile) qui s'occupent d'échapper aux caractères spéciaux, Injection SQL, etc.

Autres conseils

Il vous suffit de doubler sur les citations simples ...

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

Vous devez échapper à l'apostrophe. Dans T-SQL C'est avec une double apostrophe, donc votre insert La déclaration devient:

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

Parce qu'une seule citation est utilisée pour indiquer le début et la fin d'une chaîne; Vous devez y échapper.

La réponse courte consiste à utiliser deux citations simples - '' - Pour qu'une base de données SQL stockait la valeur comme '.

Regardez l'utilisation de remplacer pour désinfecter les valeurs entrantes:

Vous voulez vérifier '''', et les remplacer s'ils existent dans la chaîne par '''''' Afin d'échapper à la seule citation unique.

Eduffy avait une bonne idée. Il vient de le reculer dans son exemple de code. Soit en JavaScript, soit dans SQLite, vous pouvez remplacer l'apostrophe par le symbole d'accent.

Il (accidentellement je suis sûr) a placé le symbole d'accent comme délimiteur de la chaîne au lieu de remplacer l'apostrophe à O'Brian. Il s'agit en fait d'une solution terriblement simple pour la plupart des cas.

Le caractère d'apostrophe peut être inséré en appelant le CARBONISER fonction avec les apostrophes Recherche de table ASCII valeur, 39. Les valeurs de chaîne peuvent ensuite être concaténées avec un opérateur de concaténer.

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

Des citations simples sont échappées en les doubler,

Le SQL suivant illustre cette fonctionnalité.

declare @person TABLE (
    [First] nvarchar(200),
    [Last] nvarchar(200)
)

insert into @person 
    (First, Last)
values
    ('Joe', 'O''Brien')

select * from @person

Résultats

First   | Last
===================
Joe     | O'Brien

Utilisez des guillemets doubles autour des valeurs.

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

Utilisez une backtick (sur la touche ~) à la place;

`O'Brien`
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top