# sudo -u gitea /usr/local/bin/gitea migrate –config /home/gitea/gitea/config/app.ini
2025/09/12 16:05:16 cmd/migrate.go:33:runMigrate() [I] AppPath: /usr/local/bin/gitea
2025/09/12 16:05:16 cmd/migrate.go:34:runMigrate() [I] AppWorkPath: /usr/local/bin
2025/09/12 16:05:16 cmd/migrate.go:35:runMigrate() [I] Custom path: /usr/local/bin/custom
2025/09/12 16:05:16 cmd/migrate.go:36:runMigrate() [I] Log path: /home/gitea/gitea/log
2025/09/12 16:05:16 cmd/migrate.go:37:runMigrate() [I] Configuration file: /home/gitea/gitea/config/app.ini
2025/09/12 16:05:16 …2@v2.27.1/command.go:272:Run() [I] PING DATABASE mysql
2025/09/12 16:05:16 …dels/db/collation.go:178:preprocessDatabaseCollation() [W] Current database has been altered to use collation “utf8mb4_bin”
2025/09/12 16:05:16 cmd/migrate.go:40:runMigrate() [F] Failed to initialize ORM engine: sync database struct error: Error 1071 (42000): Specified key was too long; max key length is 767 bytes
原因
数据库字符集是 utf8mb4(支持 emoji 等 4 字节字符)
InnoDB 的默认 innodb_large_prefix 及 ROW_FORMAT 限制:普通索引最大 767 字节
utf8mb4 每个字符占 4 字节 → 索引长度超出限制
当 Gitea 初始化表结构时,有些字段索引长度超过 767 字节,就会报 Error 1071
这是 MySQL/MariaDB 数据库字符集和索引长度问题,在 Gitea + MySQL 中很常见。
解决
升级 MySQL/MariaDB
MySQL 5.7+ 或 MariaDB 10.2+ 默认 innodb_large_prefix=ON,并支持 ROW_FORMAT=DYNAMIC/COMPRESSED
推荐 MySQL ≥ 5.7 + InnoDB
MySQL 5.6 默认不支持 utf8mb4 索引超过 767 字节 → 推荐升级到 MySQL 5.7+ 或 MariaDB 10.2+