증상
Spring Boot Application을 시작할 때 Hibernates가 테이블을 생성하는 시점에서 에러 발생
Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytes
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:782) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:666) ~[mysql-connector-java-8.0.16.jar:8.0.16]
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-3.2.0.jar:na]
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]
... 34 common frames omitted
원인
- MySQL은 1000 byte 이상의 컬럼을 Key로 지정할 수 없음
- 따라서 다른 인코딩 방식을 사용하다가 utf8로 migration 한 경우에도 발생할 수 있음
- 인코딩 방식마다 1 character가 사용하는 byte의 수가 다르기 때문
(latin1 = 1 byte = 1 character, uft8 = 3 byte = 1 character)
해결
- 1 chararcter당 byte를 적게 사용하는 인코딩 방식으로 변경
- 또는 Key로 사용될 컬럼의 character 길이를 제한
'Computer Science > Database' 카테고리의 다른 글
Tibero6 jdbc jar 파일 다운로드 (1) | 2019.12.25 |
---|---|
Recursive CTE(Common Table Expression) 이해하기 (1) | 2019.11.12 |
tibero error JDBC 5014:Specified format code is invalid. (0) | 2019.08.30 |
댓글