-- P4a Task 3:水印版本化——albums 双版本位列(watermarkVersion 已有 P1 起, -- 本迁移补「有效版本位」watermarkEnabled/watermarkEffectiveVersion,语义见 -- packages/contracts/src/watermark.ts)+ 配置版本账本 watermark_configs + -- 历史重生成任务 watermark_jobs(id 兼作对外 jobId 与 BullMQ jobId)。 -- 校对手决:Prisma 生成 DDL 固定 utf8mb4_unicode_ci,逐表改写为库级约定的 -- utf8mb4_0900_bin(albumId/id/errorCode 等字符串列的大小写敏感语义依赖它; -- 新增两列非 VARCHAR,无校对关注)。 -- AlterTable ALTER TABLE `albums` ADD COLUMN `watermarkEffectiveVersion` INTEGER NOT NULL DEFAULT 0, ADD COLUMN `watermarkEnabled` BOOLEAN NOT NULL DEFAULT false; -- CreateTable CREATE TABLE `watermark_configs` ( `id` VARCHAR(191) NOT NULL, `albumId` VARCHAR(64) NOT NULL, `configVersion` INTEGER NOT NULL, `config` JSON NOT NULL, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), UNIQUE INDEX `watermark_configs_albumId_configVersion_key`(`albumId`, `configVersion`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `watermark_jobs` ( `id` VARCHAR(191) NOT NULL, `albumId` VARCHAR(64) NOT NULL, `configVersion` INTEGER NOT NULL, `state` VARCHAR(16) NOT NULL DEFAULT 'pending', `progress` INTEGER NOT NULL DEFAULT 0, `total` INTEGER NOT NULL DEFAULT 0, `failed` INTEGER NOT NULL DEFAULT 0, `errorCode` VARCHAR(64) NULL, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updatedAt` DATETIME(6) NOT NULL, INDEX `watermark_jobs_albumId_createdAt_idx`(`albumId`, `createdAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;