1. 배경

 1) 코드 관련 테이블 설계 중 "[42000][1071] Specified key was too long; max key length is 3072 bytes" 오류 발생

 

2. 처리방안

 ※ 참고 : EUC-KR 언어셋 : 2 bytes, UTF-8 3 bytes, UTF-8 MB4 4bytes

 1) 내 데이터베이스는 현재 UTF-8 MB4로 구성되어있다.

  - 이유는 현존하는 데이터 형식이 이모지 => UTF8MB4 이기 때문에 용량과 리소스를 좀 더 사용하더라도 

UTF8 MB4로 구성하는게 맞다 생각해서이다.

 

 2) 4개의 필드 컬럼을 최초 1000으로 설정 하였더니 인덱스 사이즈 오버로 인해 다음과 같이 변경을 한다.

  - (3072 byte / 4 (컬럼 4개)) / 4 (UTF8MB4 4byte) => 필드당 192 bytes 설정이 가능하다.

 

 

-- auto-generated definition
create or replace table TB_CODE
(
    GROUP_CD   VARCHAR(6)    not null comment '그룹코드',
    GROUP_NM   VARCHAR(1000) not null comment '그룹명',
    CD         VARCHAR(6)    not null comment '코드',
    CD_NM      VARCHAR(1000) not null comment '코드명',
    ETC_1      VARCHAR(192) comment '확장필드 1',
    ETC_2      VARCHAR(192) comment '확장필드 2',
    ETC_3      VARCHAR(192) comment '확장필드 3',
    ETC_4      VARCHAR(192) comment '확장필드 4',
    SORT_ORDER int comment '정렬순서',
    REG_DT     datetime comment '등록일',
    UP_DT      datetime comment '수정일',
    DEL_YN     int default '0' comment '사용여부',
    constraint PK_CODE
        primary key (GROUP_CD, CD)
) COMMENT '공통 코드 테이블';

create or replace index TB_CODE_IDX_1_1
    on TB_CODE (ETC_1, ETC_2)
;

create or replace index TB_CODE_IDX_1_2
    on TB_CODE (ETC_1, ETC_2, ETC_3)
;

create or replace index TB_CODE_IDX_1_3
    on TB_CODE (ETC_1, ETC_2, ETC_3, ETC_4)
;

create or replace index TB_CODE_IDX_2
    on TB_CODE (ETC_1)
;

create or replace index TB_CODE_IDX_3
    on TB_CODE (ETC_2)
;

create or replace index TB_CODE_IDX_4
    on TB_CODE (ETC_3)
;

create or replace index TB_CODE_IDX_5
    on TB_CODE (ETC_4)
;
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기