Innodb

Mariadb 錯誤 1071:指定的密鑰太長;最大密鑰長度為 1000 字節

  • January 30, 2021

一點上下文:我正在嘗試流動,但是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,而是使用合理的限制。

引用自:https://dba.stackexchange.com/questions/283655