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으로 수정하니 실행이 잘 되네요^^
'프로그래밍 언어 > 쿼리문 + Oracle + MySQL' 카테고리의 다른 글
[오라클] 검색어 자동완성을 위한 초성, 중성, 종성 분리해서 검색하는 oracle 함수 (0) | 2016.09.12 |
---|---|
SQL 쿼리문 보기 좋게 정렬해주는 사이트 - Instant SQL Formatter (0) | 2016.07.27 |
오라클(Oracle) 설치시.. Command line option Syntax error Type Command/? for Help 해결방법 (16) | 2016.07.04 |
[쿼리문/오라클] 토드(Toad)에서 바로 실행가능한 변수선언 쿼리문 (0) | 2016.02.05 |
[MySQL] 테이블, 컬럼에 코멘트(comment) 달고 phpMyAdmin에서 확인하기 (0) | 2016.01.31 |
댓글