본문 바로가기
프로그래밍 언어/쿼리문 + Oracle + MySQL

MySQL Database Error: Specified key was too long; max key length is 1000 bytes 에러 해결방법

by 우림 2016. 7. 7.

MySQL에 테이블을 하나 생성하려고 했더니 에러가 나네요.



CREATE TABLE COMTSSYSLOGSUMMARY

(

OCCRRNC_DE            CHAR(20) NOT NULL,

SVC_NM                VARCHAR(255) NOT NULL,

METHOD_NM             VARCHAR(60) NOT NULL,

CREAT_CO              NUMERIC(10) NULL,

UPDT_CO               NUMERIC(10) NULL,

RDCNT                 NUMERIC(10) NULL,

DELETE_CO             NUMERIC(10) NULL,

OUTPT_CO              NUMERIC(10) NULL,

ERROR_CO              NUMERIC(10) NULL,

PRIMARY KEY (OCCRRNC_DE,SVC_NM,METHOD_NM)

);



위 쿼리에 특별히 문제가 있어 보이진 않는데 아래와 같이 에러가 발생했습니다.


MySQL Database Error: Specified key was too long; max key length is 1000 bytes





key 사이즈가 1000 bytes가 넘는다고 했는데,

key는 OCCRRNC_DE, SVC_NM, METHOD_NM이니까 20+255+60=335byte 밖에 안 됩니다.

무엇이 문제일까요?


찾아보니 문자형 컬럼의 경우, character set에 따라 허용하는 글자수가 달라진다고 하네요.

euckr => 2byte
utf8 => 3byte

utf8mb4 => 4byte

이렇게 계산이 된다고 합니다.


moa_egov라는 DB는 utf8로 돼 있기 때문에...

335(=20+255+60) * 3 = 1,005(byte)가 되어 1,000byte가 넘어버렸네요.


따라서, key에서 컬럼 하나를 빼던지, key가 되는 컬럼의 사이즈를 줄여주면 됩니다.



CREATE TABLE COMTSSYSLOGSUMMARY

(

OCCRRNC_DE            CHAR(20) NOT NULL,

SVC_NM                VARCHAR(250) NOT NULL,

METHOD_NM             VARCHAR(60) NOT NULL,

CREAT_CO              NUMERIC(10) NULL,

UPDT_CO               NUMERIC(10) NULL,

RDCNT                 NUMERIC(10) NULL,

DELETE_CO             NUMERIC(10) NULL,

OUTPT_CO              NUMERIC(10) NULL,

ERROR_CO              NUMERIC(10) NULL,

PRIMARY KEY (OCCRRNC_DE,SVC_NM,METHOD_NM)

);




이렇게 SVC_NM 컬럼의 사이즈를 255 => 200으로 수정하니 실행이 잘 되네요^^







댓글