728x90

테이블 설계시에 character set 과 콜레이션은 신중하게 골라야 한다.

데이터베이스에서 문자셋을 섞어 쓰면 엉망이 된다.

특정 문자가 데이터에 나타나기 전까진 잘 동작하다가 어느 시점에 문제가 발생하기 시작한다.


character set 과 콜레이션을 상호 변환하는 일은 일부 연산에 오버헤드를 더한다.

일부 character set 은 CPU 연산이 더 필요하고, 메모리와 저장공간을 더 소비하며,

심한 경우 indexing을 무용지물로 만들기도 한다.


오류를 해결하려면 ALTER TABLE 을 이용해 문자셋을 변경해야 한다.

ALTER DATABASE DB명 DEFAULT CHARACTER SET utf8;
ALTER TABLE 테이블명 DEFAULT CHARACTER SET utf8;   -- utf8 대신 euckr 로 설정도 가능


DATABASE와 TABLE 생성시 CHARACTER SET 을 생락하면 기본값을 가져가게 된다.
DATABASE는 my.ini의 설정값을 기본값으로 갖고, TABLE은 DATABASE의 설정값을 기본값으로 갖게 된다.

두개의 테이블을 다른 character set을 가진 문자 칼럼에 대해 조인한다면,

MySQL 은 그중 하나를 변환해야 한다. 변환은 인덱스를 무용지물로 만들기도 하는데,

변환이 칼럼을 감싸는 함수와 같기 때문에 인덱스 적용이 안된다.


multibyte character set 에서는 문자 1개의 길이가 1byte가 아니다.

multibyte character set 을 다룰 땐 char_length() 함수를 써서 문자의 개수를 세야 한다.


select uid, char_length(kor) from mail_data where char_length(kor) > 50;


경고(warnings)가 발생하면 show warnings; 로 경고 내용을 확인해 보는게 좋다.


default character set 으로 utf-8 로 지정하면 편하다.

한글을 utf-8 로 지정하면 한 글자당 3bytes 를 차지한다.

영문은 utf-8 로 지정하면 한 글자당 1byte 를 차지한다. (저장공간 낭비 안함)

블로그 이미지

Link2Me

,