Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 아포스트로피(')를 이스케이프하는 2가지 방법

MySQL에서 문자열 데이터에 포함된 아포스트로피(작은따옴표, ')를 이스케이프 처리해야 하는 경우가 자주 발생합니다. 예를 들어 "John's"처럼 이름 중간에 작은따옴표가 들어간 값을 INSERT하려고 하면 SQL 구문 오류가 발생할 수 있습니다.

MySQL에서는 다음 두 가지 방법으로 아포스트로피를 안전하게 이스케이프할 수 있습니다.

  • 백슬래시(\)를 사용하는 방법
  • 작은따옴표를 두 번 연속으로 사용하는 방법

방법 1: 백슬래시(\) 사용하기

먼저 테스트용 테이블을 생성하겠습니다.

mysql> create table SingleQuotesDemo
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (1.16 sec)

만약 백슬래시 없이 그대로 "John's"를 삽입하면 원하는 결과를 얻을 수 없습니다. 오히려 구문 오류가 발생하여 프롬프트가 정상적으로 돌아오지 않게 됩니다.

mysql> insert into SingleQuotesDemo values(1,'John's');
'>

이제 백슬래시를 사용하여 아포스트로피를 이스케이프해 보겠습니다.

mysql> insert into SingleQuotesDemo values(1,'John\'s');
Query OK, 1 row affected (0.19 sec)

저장된 레코드를 조회하여 확인합니다.

mysql> select * from SingleQuotesDemo;

다음 출력 결과를 보면 백슬래시를 통한 이스케이프가 올바르게 적용되었음을 알 수 있습니다.

+------+--------+
| id | name |
+------+--------+
| 1 | John's |
+------+--------+
1 row in set (0.00 sec)

방법 2: 작은따옴표 두 번 사용하기

두 번째 방법은 작은따옴표를 두 번 연속으로 입력하는 것입니다. 위에서 생성한 동일한 테이블에 새로운 레코드를 삽입해 보겠습니다.

mysql> insert into SingleQuotesDemo values(2,'John''s');
Query OK, 1 row affected (0.18 sec)

레코드를 다시 조회해 보겠습니다.

mysql> select * from SingleQuotesDemo;

출력 결과는 다음과 같습니다.

+------+--------+
| id | name |
+------+--------+
| 1 | John's |
| 2 | John's |
+------+--------+
2 rows in set (0.00 sec)

이처럼 MySQL에서는 백슬래시(\') 또는 작은따옴표 두 번('')을 사용하여 아포스트로피를 간단하게 이스케이프할 수 있습니다. 참고로 애플리케이션 코드에서 SQL 쿼리를 작성할 때는 SQL 인젝션 공격을 방지하기 위해 PreparedStatement와 같은 파라미터 바인딩 방식을 함께 사용하는 것이 좋습니다.