써먹는 웹개발
[Mysql] 테이블 생성시 'ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes' 문구가 떴을 때 해결방법 본문
웹개발/Database
[Mysql] 테이블 생성시 'ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes' 문구가 떴을 때 해결방법
kmhan 2019. 12. 30. 17:19728x90
반응형
테이블 생성시 'ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes' 문구가 떴을 때 해결방법입니다.
원인 : index를 만들때 varchar(255)로 잡아서 발생하는 문제
문제의 create query
CREATE TABLE `test` ( `srl` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK', `test` varchar(255) NOT NULL COMMENT 'test', `code` varchar(255) NOT NULL COMMENT `code`, PRIMARY KEY (`srl`), UNIQUE KEY `test_unique` (`test`), KEY `code_index` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test'; |
result : ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes |
첫번째 해결방법 : (인덱스가 허용 가능하도록) 키 사이즈를 줄인다.
CREATE TABLE `test` ( `srl` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK', `test` varchar(255) NOT NULL COMMENT 'test', `code` varchar(255) NOT NULL COMMENT `code`, PRIMARY KEY (`srl`), UNIQUE KEY `test_unique` (`test`(100)), KEY `code_index` (`code`(100)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test'; |
제약사항은 byte로 처리되므로, 문자형 컬럼의 경우 character set에 따라 허용하는 글자의 수가 달라짐을 이해해야 한다.
euckr이라면 2byte, utf8이라면 3byte, utf8mb4라면 4byte로 계산해야 한다.
두번째 해결방법 : 파일 포맷 변경 및 시스템 변수 설정값을 바꾼다.
(포맷 형식을 파쿠다 포맷으로 변경후에 다시 테이블 생성)
innodb_file_format_max = Barracuda
innodb_file_format = Barracuda
이렇게 설정하여 시스템 변수를 Barracuda 형태로 생성되도록 하고,
innodb_large_prefix=ON으로 설정한다. 그러면 약 3072byte까지 생성할 수 있다.
출처
1. http://egloos.zum.com/color106/v/3045758
2. https://mysqldba.tistory.com/267
728x90
반응형
'웹개발 > Database' 카테고리의 다른 글
[SQL] SQL 인젝션 정의 및 공격(방어)방법 (0) | 2020.05.02 |
---|---|
[Mysql] Could not get JDBC Connection 관련 2가지 에러 해결방법 (0) | 2020.02.11 |
[Oracle] SQL 오류 : ORA-01747 : 열명을 올바르게 지정해 주십시오. (0) | 2019.05.29 |
[Oracle] 'ORA-01790 : 대응하는 식과 같은 데이터 유형이어야 합니다' 해결방법 (0) | 2019.05.29 |
[Mysql] 범위검색에 사용하는 Between 연산자 (0) | 2018.08.27 |
Comments