책갈피 프로그램이 MySQL DB를 사용하고 있어서 Dump를 받아왔는데 latin-1으로 charset이 되어 있어서 utf-8로 전환하였다.
다른 방법도 있겠지만 Dump를 받아온것이라 vim 을 통해 간단히 전환했다.
일단 vim으로 euc-kr로 인코딩되어 있는 dump 파일을 Loading 하면 문자가 깨져 보일것이다. 이때 다음과 같이 인코딩을 바꾸면 제대로 보인다.
:e ++enc=euc-kr
이 상태에서 인코딩을 바꿔서 저장하려면
:set fileencoding=utf-8
이렇게 하면 간단히 문자 인코딩을 변경할 수 있다.
이상태에서 다음과 같이 Dump File을 DB로 올려봤지만 …..
mysql -u root -p slibrary < sinsung.sql
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes.
위와 같은 메시지가 나오면서 설치가 중단되는데, 그 이유는 mysql 이 key 의 길이를 1000바이트로 제한하기 때문이다.
mysql 측에서는 이걸 버그라 보지 않고 “제한”이라고 봐서 당분간은 처리할 용의가 없답니다.
latin-1 에서는 1글자가 1바이트이지만 utf-8 에서는 한글자가 3바이트이기 때문에 크기 계산에 주의해야 한다.
latin1 = 1 byte = 1 chararcter
uft8 = 3 byte = 1 chararcter
즉, varchar(255)에서 255는 255 “바이트”가 아니라 “글자”이기 때문이다. utf-8일 경우 한글은 한 글자당 3바이트이므로 255 * 3 * 2 > 1000 이다.
해결방법은
CREATE TABLE bookadd_tbl (
S_ID varchar(20) NOT NULL default ”,
ADD_SEQ varchar(14) NOT NULL default ”,
ADD_NM1 varchar(200) default NULL,
ADD_AUTH varchar(128) default NULL,
ADD_CHUL varchar(128) default NULL,
ADD_YEAR varchar(60) default NULL,
ADD_TYPE varchar(100) default NULL,
ADD_LENGTH varchar(100) default NULL,
ADD_PAGE varchar(100) default NULL,
ADD_ETC varchar(255) default NULL,
ADD_DATE varchar(24) default NULL,
ADD_MARC longtext,
PRIMARY KEY (S_ID,ADD_SEQ),
KEY ADD_TYPE (ADD_TYPE),
KEY ADD_NM1 (ADD_NM1,ADD_AUTH,ADD_CHUL)
) TYPE=MyISAM;
에서 TYPE… 부분을 ENGINE=InnoDB DEFAULT CHARSET=utf8 로 하면 된다.
왜 되는지는 정확히 모르겠다.
