MySQL 쿼리의 출력 결과를 UTF-8로 변환하려면 CAST() 또는 CONVERT() 함수를 사용해야 합니다. 이 글에서는 MySQL 8.0.12 버전을 기준으로 설명합니다.
MySQL 버전 확인
먼저 현재 사용 중인 MySQL 버전을 확인해 보겠습니다.
mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec)
주의: utf8 대신 utf8mb4를 사용하세요
MySQL 8.0부터 utf8은 utf8mb3의 별칭(alias)이며, 사용 시 경고(warning)가 발생할 수 있습니다. 또한 기존의 utf8(utf8mb3)은 완전한 유니코드를 지원하지 못하므로, 이모지 등 4바이트 문자를 저장하려면 반드시 utf8mb4를 사용해야 합니다.
참고: 최신 버전의 MySQL에서는 절대 utf8(utf8mb3)을 사용하지 말고, 항상 utf8mb4를 사용하는 것이 좋습니다.
쿼리 출력을 UTF-8로 변환하는 문법
CONVERT() 함수를 사용하는 기본 문법은 다음과 같습니다.
SELECT yourColumnName1, convert(yourColumnName2 USING utf8) as anyVariableName FROM yourTableName;
CAST() 함수를 함께 활용한 다른 방법도 있습니다. 컬럼을 먼저 BINARY로 변환한 뒤 UTF-8로 변환하는 방식입니다.
SELECT yourColumnName1, CONVERT(CAST(yourColumnName2 as BINARY) USING utf8) as anyVariableName FROM yourTableName;
예제 테이블 생성
위 문법을 실습하기 위해 테이블을 먼저 생성해 보겠습니다.
mysql> create table ConvertOutputtoUtf8Demo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.79 sec)샘플 데이터 입력
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('John',24);
Query OK, 1 row affected (0.78 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Larry',21);
Query OK, 1 row affected (0.15 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Carol',26);
Query OK, 1 row affected (0.12 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Mike',27);
Query OK, 1 row affected (0.18 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Sam',22);
Query OK, 1 row affected (0.15 sec)저장된 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from ConvertOutputtoUtf8Demo;
실행 결과는 다음과 같습니다.
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 24 | | 2 | Larry | 21 | | 3 | Carol | 26 | | 4 | Mike | 27 | | 5 | Sam | 22 | +----+-------+------+ 5 rows in set (0.00 sec)
CONVERT() 함수로 UTF-8 변환하기
다음은 CONVERT() 함수를 사용해 Name 컬럼의 출력 값을 UTF-8로 변환하는 쿼리입니다.
mysql> select Id,convert(Name using utf8) as ConvertToUtf8 from ConvertOutputtoUtf8Demo;
실행 결과는 다음과 같습니다.
+----+---------------+ | Id | ConvertToUtf8 | +----+---------------+ | 1 | John | | 2 | Larry | | 3 | Carol | | 4 | Mike | | 5 | Sam | +----+---------------+ 5 rows in set, 1 warning (0.00 sec)
CAST() + CONVERT() 조합으로 변환하기
앞서 소개한 두 번째 방법, 즉 CAST()로 BINARY 타입으로 변환한 후 CONVERT()로 UTF-8을 적용하는 쿼리는 다음과 같습니다.
mysql> SELECT Id,CONVERT(CAST(Name as BINARY) USING utf8) as ConvertToUtf8 FROM ConvertOutputtoUtf8Demo;
실행 결과는 다음과 같습니다.
+----+---------------+ | Id | ConvertToUtf8 | +----+---------------+ | 1 | John | | 2 | Larry | | 3 | Carol | | 4 | Mike | | 5 | Sam | +----+---------------+ 5 rows in set, 1 warning (0.00 sec)
두 방법 모두 동일한 결과를 반환하지만, 출력에 경고가 표시되는 것을 확인할 수 있습니다. 이는 앞서 언급했듯이 utf8이 더 이상 권장되지 않기 때문입니다. 실무 환경에서는 USING utf8mb4로 지정하여 경고 없이 안전하게 변환하는 것을 권장합니다.