데이터베이스를 사용하다보면 컬럼의 인코딩이 utf8
이 아니어서 VARCHAR 타입의 컬럼에 한글을 포함한 데이터를 넣는 경우 오류가 날 때가 있다.
mysql을 설치하면 생성되는 기본 데이터베이스인 information_schema
가 각 스키마 내의 테이블 컬럼들의 메타 데이터를 가지고 있는데, information_schema 내에도 여러가지 테이블로 구분되어 메타 데이터를 저장하고 있다.
information_schema 에 어떤 테이블이 존재하는지는 다음 명령어로 살펴볼 수 있다.
USE information_schema;
SHOW TABLES;
아래는 실행 결과이다.
자세히 보면 information_schema가 가지고 있는 테이블중에는 COLUMNS
라는 이름의 테이블이 있는데, 여기에 데이터베이스내에 각 테이블이 가지는 컬럼들의 인코딩 정보가 포함되어 있다.
아래의 명령어로 COLUMNS
내에 어떤 정보들이 포함되어 있는지 자세히 살펴보자.
SELECT * FROM COLUMNS;
수많은 row 중에서 자신이 만든 데이터베이스와 테이블이 있다면 해당 정보도 포함된 것을 찾아볼 수 있다.
COLUMNS 테이블의 속성중 CHARATER_SET_NAME
과 COLLATION_NAME
을 확인하면 인코딩만 빠르게 확인해 볼 수 있다.
아래 명령어는 위의 과정을 한번에 할 수 있는 쿼리이다. WoodyDB 라는 이름의 데이터베이스에 있는 member_table의 각 필드가 어떤 인코딩으로 설정되어 있는지 예시이다.
SELECT column_name, character_set_name, collation_name
FROM information_schema.columns
WHERE table_schema = 'WoodyDB' AND TABLE_NAME='member_table';
만약 특정 인코딩으로 변경하고자 한다면 아래와 쿼리를 통해 변경할 수 있다.
(예시) member_table의 member_id 컬럼의 인코딩을 utf8
로 변경하고자 하는 경우
ALTER TABLE member_table
MODIFY member_id VARCHAR(255) CHARACTER SET utf8;