Jak wstawić wartość zawierającą apostrof (pojedynczy cudzysłów)?
Jaka jest prawidłowa składnia SQL, aby wstawić do niej wartość z apostrofem?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Ciągle dostaję błąd, ponieważ myślę, że apostrof po O jest znacznikiem końcowym dla wartości.
9 answers
Unikaj apostrofu (tzn. podwajaj pojedynczy znak cudzysłowu) w SQL:
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
right here
To samo dotyczy zapytań SELECT:
SELECT First, Last FROM Person WHERE Last = 'O''Brien'
Apostrof, lub pojedynczy cudzysłów, jest znakiem specjalnym w SQL, który określa początek i koniec łańcucha danych. Oznacza to, że aby użyć go jako części swoich literalnych danych, Musisz escape
Znak specjalny. Z jednym cytatem jest to zazwyczaj realizowane przez podwojenie cytatu. (Dwa pojedyncze znaki cudzysłowu, nie podwójny cytat zamiast pojedynczego cytatu.)
Uwaga: problem ten należy zawsze martwić tylko wtedy, gdy ręcznie edytujesz dane za pomocą surowego interfejsu SQL, ponieważ pisanie zapytań poza rozwojem i testowaniem powinno być rzadkim zjawiskiem. W kodzie są techniki i frameworki (w zależności od stosu), które dbają o znaki specjalne, SQL injection , itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 16:31:17
Musisz tylko podwoić pojedyncze cytaty...
insert into Person (First, Last)
values ('Joe', 'O''Brien')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-16 03:36:55
Musisz uciec od apostrofu. W T-SQL jest to z podwójnym apostrofem, więc twoje insert
wyrażenie staje się:
Insert into Person
(First, Last)
Values
'Joe', 'O''Brien'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 16:31:57
Ponieważ pojedynczy cudzysłów jest używany do wskazania początku i końca łańcucha; musisz z niego uciec.
Krótka odpowiedź to użycie dwóch pojedynczych cudzysłowów - ''
- w celu przechowywania wartości w bazie danych SQL jako '
.
Spójrz na użycie REPLACE do dezynfekcji przychodzących wartości:
Chcesz sprawdzić dla''''
, i zastąp je, jeśli istnieją w łańcuchu za pomocą ''''''
, aby uniknąć pojedynczego cytatu.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 16:32:56
Eduffy miał dobry pomysł . W swoim przykładzie kodowym dostał to od tyłu. W JavaScript lub SQLite możesz zastąpić apostrof symbolem akcentu.
On (przypadkowo jestem pewien) umieścił symbol akcentu jako ogranicznik dla ciągu znaków zamiast zastępowania apostrofu w O ' Brian. Jest to w rzeczywistości niezwykle proste rozwiązanie dla większości przypadków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:28
Znak apostrofu można wstawić przez wywołanie funkcji CHAR z wartością ASCII table lookup apostrofu, 39. Wartości łańcuchowe mogą być następnie konkatenowane razem z operatorem concatenate .
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-12 11:57:57
Użyj podwójnych cudzysłowów wokół wartości.
insert into Person (First, Last) Values("Joe","O'Brien")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 07:07:33
Pojedyncze cytaty są unikane przez podwojenie ich w górę ,
Poniższy SQL ilustruje tę funkcjonalność.
declare @person TABLE (
[First] nvarchar(200),
[Last] nvarchar(200)
)
insert into @person
(First, Last)
values
('Joe', 'O''Brien')
select * from @person
Wyniki
First | Last
===================
Joe | O'Brien
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 17:25:48
Zamiast tego użyj backticka (na klawiszu~);
`O'Brien`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-16 03:35:47