아포스트로피(단일 따옴표)가 포함된 값을 삽입하는 방법은 무엇입니까?
아포스트로피가 있는 값을 삽입하기 위한 올바른 SQL 구문은 무엇입니까?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
O 뒤의 아포스트로피가 값의 끝 태그인 것 같아 자꾸 오류가 납니다.
SQL에서 아포스트로피(즉, 단일 따옴표 문자를 두 배로 늘림)를 이스케이프합니다.
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
right here
SELECT 쿼리에도 동일하게 적용됩니다.
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로 '
.
REPLACE를 사용하여 들어오는 값을 검사합니다.
은 항할목을 하고 싶습니다.''''
문자열에 존재하는 경우 이를 대체합니다.''''''
단 하나의 인용문에서 벗어나기 위해.
하나의 따옴표는 두 배로 늘어나면 빠져나갑니다.
다음 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
에두피는 좋은 생각을 했습니다.그는 코드 예제에서 거꾸로 이해했습니다.JavaScript 또는 SQLite에서 아포스트로피를 액센트 기호로 바꿀 수 있습니다.
그는 O'Brian에서 아포스트로피를 대체하는 대신 악센트 기호를 문자열의 구분 기호로 배치했습니다.이것은 사실 대부분의 경우에 매우 간단한 해결책입니다.
아포스트로피 문자는 아포스트로피의 ASCII 테이블 룩업 값(39)으로 CAR 함수를 호출하여 삽입할 수 있습니다.그런 다음 문자열 값을 연결 연산자와 함께 연결할 수 있습니다.
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
값 주위에 큰따옴표를 사용합니다.
insert into Person (First, Last) Values("Joe","O'Brien")
아포스트로피를 피하는 또 다른 방법은 문자열 리터럴을 쓰는 것입니다.
insert into Person (First, Last) values (q'[Joe]', q'[O'Brien]')
다음과 같은 이유로 이 방법이 더 좋습니다.
데이터베이스에 업로드할 1000개의 이름이 포함된 Excel 목록이 있다고 가정합니다.수동으로 아포스트로피를 찾는 대신 셀 내용으로 1000개의 INSERT 문을 생성하는 공식을 만들 수 있습니다.
이것은 다른 탈출 캐릭터들에게도 효과가 있습니다.예를 들어 Regex 패턴 값(예: ^(*)(P|N)?(*)|(*)(<|>)\d\d?(*)|((?i)(in|not in)(?i)?('[^']+')))?(*)$를 테이블에 로드합니다.
정적 텍스트인 경우 사용할 수 있습니다.two single quote
아래와 같이 하나 대신:
DEC @text = 'Khabir''s Account'
다음에 보기
Khabir
두 개의 단일 인용문이 있습니다.('')
텍스트가 정적이지 않고 Store procedure 매개 변수에 전달된 경우
REPLACE(@text, '''', '')
이것이 제가 MYSQL 데이터베이스에 저장하고자 하는 API 응답으로서의 데이터입니다.여기에는 인용문, HTML 코드 등이 포함되어 있습니다.
예:-
{
rewardName: "Cabela's eGiftCard $25.00",
shortDescription: '<p>adidas gift cards can be redeemed in over 150 adidas Sport Performance, adidas Originals, or adidas Outlet stores in the US, as well as online at <a href="http://adidas.com/">adidas.com</a>.</p>
terms: '<p>adidas Gift Cards may be redeemed for merchandise on <a href="http://adidas.com/">adidas.com</a> and in adidas Sport Performance, adidas Originals, and adidas Outlet stores in the United States.'
}
솔루션
CREATE TABLE `brand` (
`reward_name` varchar(2048),
`short_description` varchar(2048),
`terms` varchar(2048),
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
를 삽입하는 동안 JSON.stringify()를 따랐습니다.
let brandDetails= {
rewardName: JSON.stringify(obj.rewardName),
shortDescription: JSON.stringify(obj.shortDescription),
term: JSON.stringify(obj.term),
}
위는 JSON 객체이고 아래는 MySQL에 데이터를 삽입하는 SQL Query입니다.
let query = `INSERT INTO brand (reward_name, short_description, terms)
VALUES (${brandDetails.rewardName},
(${brandDetails.shortDescription}, ${brandDetails.terms})`;
효과가 있었습니다.
대신 백틱(~ 키)을 사용합니다.
`O'Brien`
제공된 솔루션은 데이터베이스에서 두 개의 단일 따옴표로 문자열을 애드버타이즈하기 때문에 제대로 작동하지 않습니다. 가장 간단한 방법은 아포스트로피(단일 따옴표) 앞에 안티 백슬래시를 사용하는 것입니다.
Insert into Person (First, Last) Values 'Joe', 'O\'Brien'
언급URL : https://stackoverflow.com/questions/1912095/how-to-insert-a-value-that-contains-an-apostrophe-single-quote
'IT' 카테고리의 다른 글
.NET 고정 공백으로 문자열 형식 지정 (0) | 2023.05.23 |
---|---|
Windows 10에서 Conda 명령이 인식되지 않음 (0) | 2023.05.23 |
List. 스레드 안전 추가() (0) | 2023.05.23 |
로드된 jQuery 버전을 확인하는 방법은 무엇입니까? (0) | 2023.05.23 |
AdMob에 응용 프로그램을 넣은 후 "라이브러리를 찾을 수 없습니다" 오류가 발생 (0) | 2023.05.23 |