這個異常是索引長度超出限制 767個字節。
在測試環境部署flowable時,程序創建flowable表時,出現了【Specified key was too long; max key length is 767 bytes】異常。 這個異常在開發環境是沒有的,也就是說 跟mysql數據庫版本也有關系。
建表sql:
CREATE TABLE `FLW_EVENT_DEPLOYMENT` ( `ID_` varchar(255) NOT NULL, `NAME_` varchar(255) DEFAULT NULL, `CATEGORY_` varchar(255) DEFAULT NULL, `DEPLOY_TIME_` datetime(3) DEFAULT NULL, `TENANT_ID_` varchar(255) DEFAULT NULL, `PARENT_DEPLOYMENT_ID_` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
開發環境mysql版本:10.4.13-MariaDB-1:10.4.13+maria~bionic-log (沒問題) 測試環境mysql版本:10.1.43-MariaDB-0ubuntu0.18.04.1(有問題)
可以看出數據庫版本不一樣。
字符集長度計算:
utf8mb4 字符集是 1個字符=4個字節, ID_字節長度 = 255*4=1020字節 utf8 字符集是 1個字符=3個字節, ID_字節長度 = 255*3= 765字節 gbk字符集是 1個字符=2個字節, ID_字節長度 = 255*2= 510字節
可以看出utf-8 和 gbk 都是可以的。 所以當建表時設置utf-8字符集確實可以。 但是flowable的建表sql 是不設置表的編碼集,那也就是說他使用的是數據庫的編碼集。
flowable的數據庫是用戶自己建的,所以在建庫時設置數據的默認字符集,這樣在建表時,就會使用默認的數據庫字符集
CREATE database flowable DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
重新啟動項目,建表成功