다음 MySQL 쿼리를 사용하면 특정 데이터베이스에 포함된 모든 테이블의 문자 집합(character set)을 간단하게 확인할 수 있습니다.
mysql> Select TABLE_NAME, CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.Columns Where TABLE_SCHEMA = 'db_name';
쿼리 동작 원리
이 쿼리는 MySQL의 메타데이터 저장소인 INFORMATION_SCHEMA.Columns 뷰를 조회합니다. WHERE 절의 TABLE_SCHEMA 조건에 데이터베이스 이름을 지정하면, 해당 데이터베이스의 모든 테이블과 각 열(column)에 설정된 문자 집합을 한눈에 파악할 수 있습니다.
예제
예를 들어, 아래 쿼리는 'Alpha'라는 이름의 데이터베이스에 있는 모든 테이블의 문자 집합을 조회한 결과입니다.
mysql> Select TABLE_NAME, CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.Columns Where TABLE_SCHEMA = 'Alpha'; +------------+--------------------+ | TABLE_NAME | CHARACTER_SET_NAME | +------------+--------------------+ | employee | latin1 | | employee | latin1 | | student | latin1 | | student | NULL | | student | latin1 | +------------+--------------------+ 5 rows in set (0.06 sec)
결과 해석
위 출력 결과는 총 5개의 행을 보여줍니다. 그중 2개는 employee 테이블, 나머지 3개는 student 테이블에 해당합니다. 이는 employee 테이블이 두 개의 열로 구성되어 있고, student 테이블이 세 개의 열로 구성되어 있기 때문입니다. 즉, 이 쿼리는 테이블 단위가 아니라 열 단위로 문자 집합 정보를 반환한다는 점에 유의해야 합니다.
CHARACTER_SET_NAME이 NULL로 표시되는 경우
student 테이블의 일부 행에서 CHARACTER_SET_NAME이 NULL로 표시되어 있습니다. 이는 해당 열이 INT나 DATE처럼 숫자·날짜·시간 계열의 데이터 타입으로, 문자 집합 개념 자체가 적용되지 않기 때문입니다.
테이블별 고유한 문자 집합만 확인하기
열 단위의 중복 없이 테이블별 문자 집합만 깔끔하게 보고 싶다면 DISTINCT 키워드를 활용하면 됩니다.
mysql> Select DISTINCT TABLE_NAME, CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.Columns Where TABLE_SCHEMA = 'Alpha';