最近在创建数据库的时候,报错内容如下所示:
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.29.jar:8.0.29]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:763) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) ~[mysql-connector-java-8.0.29.jar:8.0.29]
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-3.1.0.jar:?]
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-3.1.0.jar:?]
at org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient.execute(JDBCHikariCPClient.java:82) ~[library-client-9.3.0.jar:9.3.0]
at org.apache.skywalking.oap.server.storage.plugin.jdbc.mysql.MySQLTableInstaller.createTable(MySQLTableInstaller.java:118) ~[storage-jdbc-hikaricp-plugin-9.3.0.jar:9.3.0]
at org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.H2TableInstaller.createTable(H2TableInstaller.java:79) ~[storage-jdbc-hikaricp-plugin-9.3.0.jar:9.3.0]
at org.apache.skywalking.oap.server.core.storage.model.ModelInstaller.whenCreating(ModelInstaller.java:55) ~[server-core-9.3.0.jar:9.3.0]
at org.apache.skywalking.oap.server.core.storage.model.StorageModels.addModelListener(StorageModels.java:132) ~[server-core-9.3.0.jar:9.3.0]
at org.apache.skywalking.oap.server.storage.plugin.jdbc.common.JDBCStorageProvider.start(JDBCStorageProvider.java:233) ~[storage-jdbc-hikaricp-plugin-9.3.0.jar:9.3.0]
问题排查:
1、看一下mysql的引擎是MyISAM,还是Innodb,如果是MyISAM,可以做一下修改
在MySQL启动配置文件my.ini中添加或修改:
default-storage-engine=INNODB
2、看一下数据库是不是被限制了索引大小,关闭此限制后,索引前缀的大小将可以达到3072字节。
SHOW variables like 'innodb_large_prefix';
如果value是OFF的话,可以执行以下命令
SET GLOBAL INNODB_LARGE_PREFIX = ON;