IT

아포스트로피(단일 따옴표)가 포함된 값을 삽입하는 방법은 무엇입니까?

itgroup 2023. 5. 23. 21:47
반응형

아포스트로피(단일 따옴표)가 포함된 값을 삽입하는 방법은 무엇입니까?

아포스트로피가 있는 값을 삽입하기 위한 올바른 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]')

다음과 같은 이유로 이 방법이 더 좋습니다.

  1. 데이터베이스에 업로드할 1000개의 이름이 포함된 Excel 목록이 있다고 가정합니다.수동으로 아포스트로피를 찾는 대신 셀 내용으로 1000개의 INSERT 문을 생성하는 공식을 만들 수 있습니다.

  2. 이것은 다른 탈출 캐릭터들에게도 효과가 있습니다.예를 들어 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&nbsp;<a href="http://adidas.com/">adidas.com</a>.</p>

terms: '<p>adidas Gift Cards may be redeemed for merchandise on&nbsp;<a href="http://adidas.com/">adidas.com</a>&nbsp;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

반응형