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

MySQL에서 아포스트로피가 포함된 레코드 검색하는 방법

데이터베이스 작업을 하다 보면 이름처럼 아포스트로피(')가 포함된 문자열을 저장하고 조회해야 하는 경우가 자주 있습니다. 예를 들어 Sam's, David's 같은 값은 작은따옴표가 SQL 문자열 구분 기호와 충돌하기 때문에 별도의 이스케이프 처리 없이는 오류가 발생할 수 있습니다. 이 글에서는 MySQL에서 아포스트로피가 포함된 레코드를 안전하게 저장하고 검색하는 방법을 단계별로 살펴보겠습니다.

1단계. 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (2.23 sec)

2단계. 레코드 삽입

INSERT 명령으로 샘플 데이터를 입력합니다. 핵심은 아포스트로피 앞에 백슬래시(\)를 붙여 이스케이프 처리하는 것입니다. 이렇게 하면 작은따옴표가 문자열 종료 기호가 아니라 일반 문자로 저장됩니다.

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable values('Sam\'s');
Query OK, 1 row affected (0.28 sec)

mysql> insert into DemoTable values('David\'s');
Query OK, 1 row affected (0.36 sec)

3단계. 전체 레코드 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

출력 결과

+----------+
| Name     |
+----------+
| John     |
| Sam's    |
| David's  |
+----------+
3 rows in set (0.00 sec)

4단계. 아포스트로피가 포함된 레코드 검색

WHERE 절의 조건값에 포함된 아포스트로피 역시 백슬래시로 이스케이프하면 원하는 레코드를 정확하게 조회할 수 있습니다.

mysql> select *from DemoTable WHERE Name = 'Sam\'s';

출력 결과

+-------+
| Name  |
+-------+
| Sam's |
+-------+
1 row in set (0.00 sec)

참고. 다른 이스케이프 방법

백슬래시 대신 아포스트로피를 두 번 연속으로 작성하는 방법도 있습니다. 예를 들어 WHERE Name = 'Sam''s'처럼 작성하면 MySQL은 연속된 두 개의 작은따옴표를 하나의 아포스트로피 문자로 인식합니다. 또한 실무 환경에서는 SQL 인젝션 공격을 예방하고 코드 가독성을 높이기 위해 문자열을 직접 조립하기보다 PreparedStatement와 같은 파라미터 바인딩 방식을 사용하는 것이 좋습니다.