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

MySQL에서 특정 데이터베이스의 열 이름과 함께 모든 테이블의 문자 집합 확인하는 방법

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 등으로 마이그레이션을 계획할 때 유용하게 활용할 수 있습니다.