MySQL에서 특정 데이터베이스에 속한 모든 테이블의 문자 집합(character set)을 열 이름과 함께 한 번에 확인해야 하는 경우가 있습니다. 이럴 때 INFORMATION_SCHEMA.Columns 테이블을 조회하면 간단하게 해결할 수 있습니다.
기본 쿼리 문법
아래의 MySQL 쿼리를 사용하면 특정 데이터베이스 내 모든 테이블의 문자 집합을 열 이름, 테이블 이름과 함께 확인할 수 있습니다.
mysql> SELECT COLUMN_NAME, TABLE_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db_name';쿼리 설명
- COLUMN_NAME: 열(컬럼)의 이름을 반환합니다.
- TABLE_NAME: 해당 열이 속한 테이블의 이름을 반환합니다.
- CHARACTER_SET_NAME: 해당 열에 적용된 문자 집합을 반환합니다.
- TABLE_SCHEMA = 'db_name': 조회 대상 데이터베이스를 지정하는 조건입니다.
참고로 문자 집합이 적용되지 않는 숫자형, 날짜형 등의 열은 CHARACTER_SET_NAME 값이 NULL로 표시됩니다.
실행 예시
예를 들어, 'Alpha'라는 데이터베이스의 모든 테이블에 대해 열 이름과 문자 집합을 함께 조회하려면 아래와 같이 쿼리를 작성합니다.
mysql> SELECT COLUMN_NAME AS 'Column', TABLE_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'Alpha';위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+---------+------------+--------------------+ | Column | TABLE_NAME | CHARACTER_SET_NAME | +---------+------------+--------------------+ | Name | employee | latin1 | | email | employee | latin1 | | Name | student | latin1 | | RollNo | student | NULL | | Address | student | latin1 | +---------+------------+--------------------+ 5 rows in set (0.04 sec)
결과 해석
위 결과를 보면 employee 테이블과 student 테이블의 문자열 타입 열들은 latin1 문자 집합을 사용하고 있는 것을 알 수 있습니다. 반면 RollNo 열은 숫자 타입이므로 문자 집합이 적용되지 않아 NULL로 표시됩니다.
이처럼 INFORMATION_SCHEMA를 활용하면 데이터베이스 전체의 문자 집합 현황을 손쉽게 파악할 수 있으며, 인코딩 문제를 사전에 점검하거나 utf8mb4 등으로 마이그레이션을 계획할 때 유용하게 활용할 수 있습니다.