Innodb
Mariadb 錯誤 1071:指定的密鑰太長;最大密鑰長度為 1000 字節
一點上下文:我正在嘗試流動,但是tomcat在填充數據庫時在某個點阻塞,通常的異常文本牆歸結為這篇文章的標題。很長一段時間以來,我第一次將手放在tomcat上,我可能會錯過明顯的東西。
更新:這個查詢現在有效。
CREATE TABLE flowable.FLW_EVENT_DEPLOYMENT ( ID_ VARCHAR(255) NOT NULL, NAME_ VARCHAR(255) NULL, CATEGORY_ VARCHAR(255) NULL, DEPLOY_TIME_ datetime(3) NULL, TENANT_ID_ VARCHAR(255) NULL, PARENT_DEPLOYMENT_ID_ VARCHAR(255) NULL, CONSTRAINT PK_FLW_EVENT_DEPLOYMENT PRIMARY KEY (ID_) )
我所做的:我從 utf8mb4 切換到普通的舊 utf8,這要歸功於“我知道 UTF8mb4 最多只能支持 VARCHAR(191)”(感謝@Lennart 讓我更加思考這個問題)。所以有進展,但我稍後在另一個查詢中遇到了同樣的錯誤:
CREATE UNIQUE INDEX ACT_IDX_EVENT_DEF_UNIQ ON flowable.FLW_EVENT_DEFINITION(KEY_, VERSION_, TENANT_ID_)
這三列分別是 varchar(255) utf8_general_ci、int(11)、varchar(255) utf8_general_ci。
Tomcat 8.5.61
mariadb 10.4.17
我發現了很多建議的解決方案,但似乎沒有一個適用於我的 mariadb 版本,
innodb-large-prefix=ON
特別是已被棄用,嘗試了一些不同的排序規則但沒有成功。我已經在這上面花了很多時間,也嘗試將 mariadb 連接器換成 mysql 連接器,以排除庫本身的錯誤。例如,我在這裡嘗試了接受的解決方案無濟於事,可能是因為:
- innodb_file_format 已棄用且無效。它可能會在未來的版本中被刪除。
- innodb_file_format_max 令人驚訝地導致配置檢查錯誤,Antelope 無論如何都已被棄用,mariadb 不會將它用於新表
- 出於兼容性目的,innodb_large_prefix 在 10.3.1 中已刪除,並在 10.4.3 中恢復為已棄用和未使用的變數。
使用 ENGINE=InnoDB,而不是 MyISAM。您更改設置的嘗試沒有用,因為您沒有將 InnoDB 用於相關表。
在創建表之前,可以在 my.cnf 中將其指定為預設值。否則在
CREATE TABLE
.另外,不要盲目使用 255,而是使用合理的限制。