-
--- 初学数据Lv2
发表于2018-8-21 11:40
悬赏10
已解决
之前数据库默认连接池是oracle一切正常,今天更换成mysql,测试连接也正常,系统自动重启服务后发现启动不了,之后一直出现这个字节错误,说表索引创建异常,哪位大佬可以解决一下,拜托拜托拜托
系统小憩片刻...com.esen.jdbc.pool.PooledSQLException: 创建表索引:ES10_VFS
CREATE INDEX IES10_VFSDK4077 ON ES10_VFS(PARENTDIR_)
出现异常:Specified key was too long; max key length is 767 bytes
原因
MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制。Mysql主键是用索引实现的,所以主键长度同索引长度;
数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引,而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)于是utf8字符编码下,255*3 byte 超过限制
一般情况下不建议使用这么长的索引,对性能有一定影响,建议删除该索引;
解决(也可百度下相关删除索引办法,以防误删,先备份一下哦)
1 使用innodb引擎;
2 启用innodb_large_prefix选项,将约束项扩展至3072byte;
3 重新创建数据库;
my.cnf配置:
default-storage-engine=INNODB
innodb_large_prefix=on
8个回答
本帖最后由 数据观 于 2018-8-21 12:05 编辑
原因
MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制。Mysql主键是用索引实现的,所以主键长度同索引长度;
数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引,而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)于是utf8字符编码下,255*3 byte 超过限制
一般情况下不建议使用这么长的索引,对性能有一定影响,建议删除该索引;
解决(也可百度下相关删除索引办法,以防误删,先备份一下哦)
1 使用innodb引擎;
2 启用innodb_large_prefix选项,将约束项扩展至3072byte;
3 重新创建数据库;
my.cnf配置:
default-storage-engine=INNODB
innodb_large_prefix=on
数据观 发表于 2018-8-21 12:03
原因
MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制。Mysql主键是用索 ...
默认引擎就是innodb,错的好像莫名其妙
抱歉,刚去吃饭了