MySQL 은 Database, Table, Column 마다 각각 character set encoding 을 설정할 수 있으므로 테이블이나 컬럼이 다른 인코딩으로 되어 있어서 한글 문제가 발생할 경우 원인을 찾기가 어려울 수 있습니다.

database 명이 mydb 이고 table 명이 mytable 일때 데이타베이스와 테이블의 문자 집합 확인하는 방법에 대해서 설명합니다.

Schema 조회

database 확인

database 의 인코딩은 다음 쿼리로 확인할 수 있습니다.

SELECT default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA 
WHERE schema_name = "mydb";
SQL
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_0900_ai_ci     |
+----------------------------+------------------------+
1 row in set (0.00 sec)

CODE


table 확인

table 의 인코딩을 출력하는 쿼리입니다.

SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "mydb"
  AND T.table_name = "mytable";
SQL

MySQL 8 에서는 제대로 동작하지 않습니다.

column 확인

컬럼마다 인코딩을 달리 할 필요는 없겠지만 혹시 모르니 다음 쿼리로 컬럼의 인코딩을 확인할 수 있습니다.

SELECT COLUMN_NAME, character_set_name,COLLATION_NAME FROM information_schema.`COLUMNS` C
WHERE table_schema = "mydb"
  AND table_name = "mytable"
  AND column_name = "mycolumn";
SQL


Show 명령어 사용(추천)

가장 쉽고 간편한 명령어로 결과중에 Collation 컬럼을 확인해 보면 됩니다.

SHOW FULL COLUMNS FROM mytable;
SQL

DB 와 Table 생성문 조회

show create 구문으로 db 나 table 을 생성한 DDL 을 확인할 수 있으므로 DDL 실행시 지정한 encoding 을 확인합니다.

SHOW CREATE DATABASE mydb;
SQL


table 생성 DDL 은 아래 명령으로 확인할 수 있습니다.

show create table mytable;
CODE


같이 보기


Ref