Specified key was too long; max key length is 767 bytes


      這個異常是索引長度超出限制 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;

  重新啟動項目,建表成功

 

  

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM