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

MySQL 쿼리 출력 결과를 UTF-8로 변환하는 방법 (CONVERT, CAST 함수 활용)

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부터 utf8utf8mb3의 별칭(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로 지정하여 경고 없이 안전하게 변환하는 것을 권장합니다.