問題描述
springboot整合flowable時啟動報錯,資料庫為 mysql 5,按說不應該會報錯,看一下報錯資訊
翻譯一下 就是建立這個Bean的時候報錯
再看下一個
這個意思就是 索引字段長度太長,超過了767bytes
講道理 不應該啟動報錯的,啟動就是去建立flowable需要的表
原因分析:
我有兩台電腦,在一台電腦上能正常運作,通過排查發現兩台電腦的mysql版本不一樣,一個是5,一個是8,後來也想了一下5和8的預設存儲引擎也是不一樣的,5.5之前預設存儲引擎是MyISAM,5.5之後預設存儲引擎是Innodb
查了一下目前儲存電腦的mysql版本是 5.6,是以不是預設存儲引擎的問題
然後在網上看到一個大佬關于索引最大長度問題的解釋
MySQL對索引字段長度有限制
innodb引擎的每個索引列長度限制為767位元組(bytes),所有組成索引列的長度和不能大于3072位元組
myisam引擎的每個索引列長度限制為1000位元組,所有組成索引列的長度和不能大于1000位元組
varchar的最大長度是指字元長度,若資料庫字元集為utf-8,則一個字元占3個bytes。是以在utf-8字元集下,innodb引擎建立的單列索引長度不能超過255個字元
mysql版本不同而導緻的索引長度限制不同
在MySQL5.5版本,引入了innodb_large_prefix,用來禁用大型字首索引,以便與不支援大索引鍵字首的早期版本的InnoDB相容
開啟innodb_large_prefix可以使單索引的長度限制達到3072位元組(但是聯合索引總長度限制還是3072位元組),禁用時單索引的長度限制為767位元組
在MySQL5.5版本與MySQL5.6版本,innodb_large_prefix是預設關閉的,在MySQL5.7及以上版本則預設開啟
在MySQL8.0版本中,innodb_large_prefix已被移除
這就是我在自己機器(MySQL8.0)上可以建立1024字元(utf8字元集下表示3072位元組)長的索引,而在伺服器(MySQL5.5)上不行的原因
解決方案:
是以解決方案就顯而易見了,麻溜更新資料庫吧