MySQL에서 REPLACE() 함수로 &를 앰퍼샌드(&)로 바꾸는 방법
웹 폼이나 HTML 처리 과정을 거친 데이터를 보면 값 중간중간에 “&”처럼 HTML 엔티티 형태로 저장된 경우가 있습니다. 이런 값을 실제 앰퍼샌드 문자인 “&”로 바꾸고 싶다면 MySQL의 REPLACE() 함수를 사용하면 됩니다. REPLACE() 함수는 문자열 안에서 지정한 부분 문자열을 찾아 다른 문자열로 교체해 주는 함수로, UPDATE 문과 함께 사용하면 저장된 데이터를 손쉽게 일괄 치환할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value varchar(100)
);
Query OK, 0 rows affected (1.06 sec)
이어서 INSERT 명령으로 샘플 데이터를 몇 개 추가해 보겠습니다. 두 번째 레코드에는 “&”라는 문자열이 그대로 저장되도록 입력했습니다.
mysql> insert into DemoTable(Value) values('@amp');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable(Value) values('&');
Query OK, 1 row affected (1.09 sec)
mysql> insert into DemoTable(Value) values('#amp');
Query OK, 1 row affected (0.28 sec)
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
현재 저장된 데이터는 다음과 같습니다.
+----+-------+ | Id | Value | +----+-------+ | 1 | @amp | | 2 | & | | 3 | #amp | +----+-------+ 3 rows in set (0.00 sec)
이제 “&” 문자열을 앰퍼샌드(“&”)로 대체하는 UPDATE 쿼리를 실행해 보겠습니다.
mysql> update DemoTable set Value=replace(Value,'&','&'); Query OK, 1 row affected (0.56 sec) Rows matched: 3 Changed: 1 Warnings: 0
쿼리 실행 후 테이블의 레코드를 다시 한번 확인해 보겠습니다.
mysql> select *from DemoTable;
결과를 보면 두 번째 레코드의 값이 “&”에서 “&”로 정상적으로 변경된 것을 확인할 수 있습니다.
+----+-------+ | Id | Value | +----+-------+ | 1 | @amp | | 2 | & | | 3 | #amp | +----+-------+ 3 rows in set (0.00 sec)
정리
REPLACE(컬럼명, '찾을 문자열', '바꿀 문자열') 형식으로 REPLACE() 함수를 UPDATE 문과 조합하면 컬럼에 저장된 특정 문자열을 한 번에 치환할 수 있습니다. HTML 엔티티 정리나 특수문자 변환 같은 데이터 정제 작업에서 매우 유용하게 활용할 수 있으니 실무에서 참고해 보시기 바랍니다.