MySQL에서 아포스트로피 대체하기
MySQL에서 문자열 데이터에 포함된 아포스트로피(')를 다른 문자로 바꾸거나 완전히 제거하려면 replace() 함수를 사용하면 됩니다. 기본 문법은 다음과 같습니다.
update yourTableName set yourColumnName=replace(yourColumnName,'\'','');
replace() 함수는 세 개의 인자를 받습니다. 첫 번째는 대상 컬럼, 두 번째는 찾을 문자열, 세 번째는 교체할 문자열입니다. 위 예제에서는 아포스트로피를 빈 문자열('')로 교체하여 사실상 제거하는 방식입니다.
예제 테이블 생성
동작을 확인하기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Sentence varchar(100)
);
Query OK, 0 rows affected (0.17 sec)
샘플 데이터 삽입
insert 명령으로 몇 개의 레코드를 추가합니다. 이때 문장 안에 아포스트로피가 포함되도록 역슬래시(\)로 이스케이프 처리합니다.
mysql> insert into DemoTable(Sentence) values('Chris\'s Father');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable(Sentence) values('Larry\'s Mother');
Query OK, 1 row affected (0.06 sec)select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+----------------+
| Id | Sentence |
+----+----------------+
| 1 | Chris's Father |
| 2 | Larry's Mother |
+----+----------------+
2 rows in set (0.00 sec)
아포스트로피 대체 쿼리 실행
다음은 replace() 함수를 활용해 아포스트로피를 제거하는 실제 쿼리입니다.
mysql> update DemoTable set Sentence=replace(Sentence,'\'','');
Query OK, 2 rows affected (0.07 sec)
Rows matched: 2 Changed: 2 Warnings: 0
아포스트로피가 정상적으로 대체되었는지 확인하기 위해 테이블을 다시 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+---------------+
| Id | Sentence |
+----+---------------+
| 1 | Chriss Father |
| 2 | Larrys Mother |
+----+---------------+
2 rows in set (0.00 sec)
참고 사항
아포스트로피를 제거하는 대신 다른 문자로 바꾸고 싶다면 replace()의 세 번째 인자에 원하는 값을 넣으면 됩니다. 예를 들어 replace(Sentence,'\'','"')처럼 작성하면 아포스트로피가 큰따옴표로 대체됩니다. 또한 SQL 인젝션 방지를 위해 애플리케이션 단에서는 prepared statement를 사용하는 것이 안전하다는 점도 함께 기억해 두시기 바랍니다.