웹개발/Database
[Mysql] 테이블 생성시 'ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes' 문구가 떴을 때 해결방법
kmhan
2019. 12. 30. 17:19
728x90
반응형
테이블 생성시 '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
반응형