공통컴포넌트의 MYSQL UTF8 DDL문 오류입니다.
- 작성자 :
- 정*교
- 작성일 :
- 2014-07-25 16:00:36
- 조회수 :
- 1,069
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
제공된 MYSQL DDL문을 실행했더니 아래와 같은 오류가 발생합니다.
오류 원인은 index 생성시 최대 길이가 1000byte 초과할 때 나오는 오류로 확인했는데
EUC-KR에서는 문제가 없는데 UTF8로 셋팅하니 문제가 생깁니다.
스키마를 변경해야 하나요?
=============================
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)
)
#42000Specified key was too long; max key length is 1000 bytes
CREATE UNIQUE INDEX COMTSSYSLOGSUMMARY_PK ON COMTSSYSLOGSUMMARY
(
OCCRRNC_DE,
SVC_NM,
METHOD_NM
)
#42S02Table 'siusysForMySQL.COMTSSYSLOGSUMMARY' doesn't exist
CREATE TABLE COMTNUSERLOG
(
OCCRRNC_DE CHAR(20) NULL,
RQESTER_ID VARCHAR(20) NULL,
SVC_NM VARCHAR(255) NULL,
METHOD_NM VARCHAR(60) 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,RQESTER_ID,SVC_NM,METHOD_NM)
)
#42000Specified key was too long; max key length is 1000 bytes
CREATE UNIQUE INDEX COMTNUSERLOG_PK ON COMTNUSERLOG
(
OCCRRNC_DE,
RQESTER_ID,
SVC_NM,
METHOD_NM
)
#42S02Table 'siusysForMySQL.COMTNUSERLOG' doesn't exist
오류 원인은 index 생성시 최대 길이가 1000byte 초과할 때 나오는 오류로 확인했는데
EUC-KR에서는 문제가 없는데 UTF8로 셋팅하니 문제가 생깁니다.
스키마를 변경해야 하나요?
=============================
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)
)
#42000Specified key was too long; max key length is 1000 bytes
CREATE UNIQUE INDEX COMTSSYSLOGSUMMARY_PK ON COMTSSYSLOGSUMMARY
(
OCCRRNC_DE,
SVC_NM,
METHOD_NM
)
#42S02Table 'siusysForMySQL.COMTSSYSLOGSUMMARY' doesn't exist
CREATE TABLE COMTNUSERLOG
(
OCCRRNC_DE CHAR(20) NULL,
RQESTER_ID VARCHAR(20) NULL,
SVC_NM VARCHAR(255) NULL,
METHOD_NM VARCHAR(60) 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,RQESTER_ID,SVC_NM,METHOD_NM)
)
#42000Specified key was too long; max key length is 1000 bytes
CREATE UNIQUE INDEX COMTNUSERLOG_PK ON COMTNUSERLOG
(
OCCRRNC_DE,
RQESTER_ID,
SVC_NM,
METHOD_NM
)
#42S02Table 'siusysForMySQL.COMTNUSERLOG' doesn't exist
A
안녕하세요. 정준교님.
MySQL에서 char나 varchar에 지정되는 숫자가 byte가 아닌 해당 인코딩에 대한 글자수로 지정되기 때문에 발생된 것입니다.
이 경우 몇 가지 해결 방법(ex: mysql의 innodb_large_prefix 설정 지정 등)이 있을 것 같으나,
말씀하신 것 처럼 스키마 변경을 하시는 것이 좋으실 것 같습니다
SVC_NM를 최대 255으로 지정하였으나 한글이 아닌 영문명으로 지정되기 때문에 100정도로 지정하셔도 되실 것 같습니다.
해당 스키마 변경에 대한 공통컴포넌트 반영은 검토 후 조치하도록 하겠습니다.
(특정 DBMS에 대한 제약사항으로 전체 반영에 대한 필요성 검토 등)
그럼, 즐거운 하루되십시오.
감사합니다.
MySQL에서 char나 varchar에 지정되는 숫자가 byte가 아닌 해당 인코딩에 대한 글자수로 지정되기 때문에 발생된 것입니다.
이 경우 몇 가지 해결 방법(ex: mysql의 innodb_large_prefix 설정 지정 등)이 있을 것 같으나,
말씀하신 것 처럼 스키마 변경을 하시는 것이 좋으실 것 같습니다
SVC_NM를 최대 255으로 지정하였으나 한글이 아닌 영문명으로 지정되기 때문에 100정도로 지정하셔도 되실 것 같습니다.
해당 스키마 변경에 대한 공통컴포넌트 반영은 검토 후 조치하도록 하겠습니다.
(특정 DBMS에 대한 제약사항으로 전체 반영에 대한 필요성 검토 등)
그럼, 즐거운 하루되십시오.
감사합니다.