10.9. 컬럼 문자 셋 변환
특정 문자 셋을 사용하기 위해 바이너리 또는 비-바이너리 스트링을 변환하고자 할 경우에는 ALTER TABLE을 사용한다. 변환을 성공적으로 실행하기 위해서는 다음의 조건이 반드시 적용되어야 한다:
- 컬럼이 바이너리 데이터 타입 (BINARY, VARBINARY, BLOB)을 가지고 있다면, 모든 데이터 타입 값을 단일 문자 셋으로 인코딩해야 한다. 정보를 여러 가지의 문자 셋에 저장하기 위해 바이너리 컬럼을 사용한다면, MySQL은 어떤 문자 셋을 사용해야 할지를 모르기 때문에 변환이 올바르게 진행되지 않는다.
- 컬럼이 비-바이너리 데이터 타입 (CHAR, VARCHAR, TEXT)을 가지고 있다면, 이러한 데이터 타입 값은 다른 문자 셋이 아닌 컬럼 자체의 문자 셋으로 인코딩 되어야 한다. 만일 데이터 값이 다른 문자 셋으로 인코딩 된다면, 컬럼을 바이너리 타입으로 우선 변환 시킨 후에, 원하는 문자 셋을 사용해서 비-바이너리 컬럼으로 변경한다.
테이블 t가 BINARY(50)로 정의된 col1라는 이름의 컬럼을 하나 가지고 있다고 가정하자. 컬럼 안에 들어 있는 정보를 단일 문자 셋으로 인코딩 하였다고 가정하면, 여러분은 이것을 인코딩한 문자 셋을 가지고 있는 비-바이너리 컬럼으로 변환할 수가 있다. 예를 들면, col1이 greek 문자를 표시하는 바이너리 데이터를 가지고 있다면, 이것을 다음과 같이 변환할 수가 있다:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET greek;
테이블 t가 CHAR(50) CHARACTER SET latin1로 정의된 col1라는 이름의 비-바이너리 컬럼을 가지고 있지만 utf8를 사용해서 다양한 언어 값으로 저장하기 위해 이것을 변환하고자 한다고 가정하면, 아래의 명령문을 사용하도록 한다:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;