好家伙,我来救你们命啦!!!
直接原因就是任务id长度18导致相关操作有问题,就是直接去掉18的限制接口,涉及数据库结构和本地文件(修改后要重新编译)
MySQL 的 CHAR(18) 要先改!从源头做起!
✅ 完整修复流程(含数据库)
第一步:修改 Go 结构体校验规则(这个老六写死了18位)
文件:crocodile/core/utils/define/define.go
// GetID get task id in post
type GetID struct {
ID string `json:"id" form:"id" binding:"required,min=1,max=32"`
}
第二步:修改 MySQL 表字段类型(关键!)
Crocodile 默认使用 CHAR(18) 存储任务 ID,需扩展为 VARCHAR(32),当然你们可以自己设置长度,时间会越来越大的,生成的规则看了一下,我就直接来个32的,哈哈哈。
登录 MySQL(在服务器执行,账号密码演示用,实际按自己的):
docker exec -it crocodile-mysql-1 mysql -uroot -pcrocodile
执行 SQL 修改表结构:
USE crocodile;
-- 修改主任务表
ALTER TABLE crocodile task
MODIFY COLUMN id VARCHAR(32) NOT NULL COMMENT '任务ID';
-- 修改日志表(如果有)
ALTER TABLE crocodile_log
MODIFY COLUMN taskid VARCHAR(32) NOT NULL COMMENT '任务ID',
MODIFY COLUMN `errtaskid` VARCHAR(32) NOT NULL DEFAULT "" COMMENT "出错任务ID";
-- 如果有其他关联表,也需一并修改
为什么用 VARCHAR(32) 而不是 CHAR(32)?
CHAR(18) 是定长,浪费空间且无法扩展
VARCHAR(32) 可变长,兼容 1~32 位 ID(包括 UUID 等未来可能格式)
反正你自己看着办哈,我是自己修复过程!!!
第三步:本地编译新二进制
# Windows PowerShell
go env -w GOPROXY=https://goproxy.cn,direct
go mod tidy
$env:GOOS="linux"; $env:GOARCH="amd64"
go build -o crocodile-linux-amd64 .
第四步:上传二进制到服务器
# 上传后赋权
chmod +x /www/wwwroot/crocodile/crocodile-linux-amd64
第五步:修改 docker-compose.yml 启用本地构建
这里很关键,之前就是通过远程拉取作者做好的,这里就要改成自己目录,重新编译
services:
master:
# image: labulaka522/crocodile # ← 注释掉
build: . # 替代 image: ...
# ...
worker:
# image: labulaka522/crocodile:worker # ← 注释掉
build: . # 替代 image: ...
# ...
第六步:重建并启动服务
docker-compose down
# 我来个强扭的瓜,很解渴
docker-compose up -d --build --force-recreate
第七步:验证端到端功能
- 创建一个 19 位 ID 的任务(或等待系统生成)
- 删除该任务
- 不在报
服务端锴误或者请求参数错误了
⚠️ 注意事项
| 项目 |
说明 |
| 备份数据库 |
修改前建议备份:mysqldump -uroot -pcrocodile crocodile > crocodile_backup.sql |
| 字段索引 |
id 通常是主键或唯一索引,VARCHAR 不影响性能(InnoDB 对短字符串优化良好) |
| 历史数据 |
CHAR(18) 转 VARCHAR(32) 是安全的,不会丢失数据 |
最终一句话总结
改 Go 校验规则 + 改 MySQL 字段为 VARCHAR(32) + 本地编译 + Docker 本地构建 = 完美支持 19 位及以上任务 ID
好家伙,我来救你们命啦!!!
直接原因就是任务id长度18导致相关操作有问题,就是直接去掉18的限制接口,涉及数据库结构和本地文件(修改后要重新编译)
MySQL 的
CHAR(18)要先改!从源头做起!✅ 完整修复流程(含数据库)
第一步:修改 Go 结构体校验规则(这个老六写死了18位)
文件:
crocodile/core/utils/define/define.go第二步:修改 MySQL 表字段类型(关键!)
Crocodile 默认使用
CHAR(18)存储任务 ID,需扩展为VARCHAR(32),当然你们可以自己设置长度,时间会越来越大的,生成的规则看了一下,我就直接来个32的,哈哈哈。登录 MySQL(在服务器执行,账号密码演示用,实际按自己的):
docker exec -it crocodile-mysql-1 mysql -uroot -pcrocodile执行 SQL 修改表结构:
第三步:本地编译新二进制
第四步:上传二进制到服务器
# 上传后赋权 chmod +x /www/wwwroot/crocodile/crocodile-linux-amd64第五步:修改
docker-compose.yml启用本地构建这里很关键,之前就是通过远程拉取作者做好的,这里就要改成自己目录,重新编译
第六步:重建并启动服务
docker-compose down # 我来个强扭的瓜,很解渴 docker-compose up -d --build --force-recreate第七步:验证端到端功能
服务端锴误或者请求参数错误了mysqldump -uroot -pcrocodile crocodile > crocodile_backup.sqlid通常是主键或唯一索引,VARCHAR不影响性能(InnoDB 对短字符串优化良好)CHAR(18)转VARCHAR(32)是安全的,不会丢失数据最终一句话总结