728x90
SQL에서 문자열 컬럼에 **싱글 쿼테이션(')**을 포함하여 값을 저장하려면, 쿼테이션을 이스케이프(escape) 처리해야 합니다. 일반적으로 싱글 쿼테이션을 두 번('') 입력하면 올바르게 저장됩니다.
1. SQL 종류별 싱글 쿼테이션 처리 방법
SQL 문법은 대부분의 DBMS에서 유사하지만, 특정 데이터베이스에서는 추가적인 이스케이프 방식이 존재합니다.
DBMS | 싱글 쿼테이션 입력 방법 | 예제 |
MySQL / PostgreSQL / Oracle / SQL Server | ' → '' (두 개 입력) | INSERT INTO users (name) VALUES ('O''Reilly'); |
MySQL (백슬래시 사용 가능) | ' → \' (백슬래시 사용) | INSERT INTO users (name) VALUES ('O\'Reilly'); (ANSI 모드에서는 사용 불가) |
SQLite | ' → '' (두 개 입력) | INSERT INTO users (name) VALUES ('O''Reilly'); |
일반적으로 'O''Reilly'처럼 싱글 쿼테이션을 두 개 연속으로 입력하는 방식이 표준적이며, 다양한 데이터베이스에서 호환됩니다.
2. SQL INSERT 예제
(1) 기본적인 INSERT 문 (싱글 쿼테이션 포함)
INSERT INTO employees (id, name) VALUES (1, 'John O''Connor');
실제 저장되는 값:
John O'Connor
(2) MySQL에서 백슬래시 사용
(일반적으로 ANSI SQL 모드가 아닐 때 가능)
INSERT INTO employees (id, name) VALUES (2, 'John O\'Connor');
(3) PreparedStatement를 활용한 삽입 (Java 예제)
SQL에서 직접 값을 하드코딩하는 대신, PreparedStatement를 사용하면 자동으로 적절한 이스케이프 처리가 됩니다.
String sql = "INSERT INTO employees (id, name) VALUES (?, ?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, 3);
pstmt.setString(2, "O'Reilly");
pstmt.executeUpdate();
이렇게 하면 'O'Reilly'를 올바르게 저장할 수 있습니다.
3. SQL Injection 예방을 위한 주의점
- 직접 INSERT INTO ... VALUES ('O''Reilly') 같은 방식으로 값을 입력하는 것은 SQL Injection 공격에 취약할 수 있습니다.
- PreparedStatement 또는 **ORM (e.g., JPA, Hibernate)**을 사용하여 SQL을 안전하게 실행하는 것이 권장됩니다.
LIST
'Develop' 카테고리의 다른 글
[PostgreSQL] EXISTS 쿼리 사용법과 예제 (0) | 2025.02.06 |
---|---|
[PostgreSQL] 순차적으로 증가하는 숫자형 컬럼 중간에 비어있는 값(누락된 값)을 조회 (2) | 2025.02.04 |
[PostgreSQL] UNIQUE Key 생성 방법 총정리 (0) | 2025.02.04 |
TinyMCE 에디터 사용 방법과 이미지 첨부 커스텀마이징 (1) | 2025.01.22 |
[PostgreSQL] SELECT 데이터를 INSERT하는 방법 (2) | 2025.01.22 |