-- P2 Task 2:OV 库初始迁移(副本/同步账本/互动流水共 9 表)。 -- 同 db-cn 固化手决流程:Prisma 生成的 MySQL DDL 固定写 utf8mb4_unicode_ci, -- 会覆盖库级 utf8mb4_0900_bin;publicToken/entityType 等的大小写敏感语义 -- 依赖 bin 校对,故逐表改写为 utf8mb4_0900_bin(表级默认覆盖其全部 -- VARCHAR 列;后续 ov 迁移同样需要复核 CREATE TABLE 的 collation)。 -- CreateTable CREATE TABLE `albums_ov` ( `albumId` VARCHAR(191) NOT NULL, `publicToken` VARCHAR(32) NOT NULL, `status` VARCHAR(191) NOT NULL DEFAULT 'active', `publicEnabled` BOOLEAN NOT NULL DEFAULT true, `downloadEnabled` BOOLEAN NOT NULL DEFAULT true, `originalDownloadEnabled` BOOLEAN NOT NULL DEFAULT false, `emergencyDisabled` BOOLEAN NOT NULL DEFAULT false, `translations` JSON NOT NULL, `categories` JSON NOT NULL, `bannerAssetKey` VARCHAR(255) NULL, `defaultLocale` VARCHAR(16) NOT NULL, `timezone` VARCHAR(64) NOT NULL DEFAULT 'Asia/Shanghai', `startAt` DATETIME(6) NULL, `endAt` DATETIME(6) NULL, `entityVersion` INTEGER NOT NULL, `updatedAt` DATETIME(6) NOT NULL, UNIQUE INDEX `albums_ov_publicToken_key`(`publicToken`), PRIMARY KEY (`albumId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `photos_ov` ( `photoId` VARCHAR(191) NOT NULL, `albumId` VARCHAR(64) NOT NULL, `categoryId` VARCHAR(64) NULL, `width` INTEGER NULL, `height` INTEGER NULL, `originalObjectKey` VARCHAR(255) NOT NULL, `thumbObjectKey` VARCHAR(255) NOT NULL, `browseObjectKey` VARCHAR(255) NOT NULL, `likeTotal` INTEGER NOT NULL DEFAULT 0, `countVersion` INTEGER NOT NULL DEFAULT 0, `visibility` VARCHAR(191) NOT NULL, `entityVersion` INTEGER NOT NULL, `publishedAt` DATETIME(6) NULL, `updatedAt` DATETIME(6) NOT NULL, INDEX `photos_ov_albumId_visibility_publishedAt_idx`(`albumId`, `visibility`, `publishedAt`), PRIMARY KEY (`photoId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `sync_inbox` ( `eventId` VARCHAR(191) NOT NULL, `entityType` VARCHAR(32) NOT NULL, `entityId` VARCHAR(64) NOT NULL, `albumId` VARCHAR(64) NULL, `entityVersion` INTEGER NOT NULL, `tombstone` BOOLEAN NOT NULL DEFAULT false, `priority` VARCHAR(16) NOT NULL DEFAULT 'normal', `payload` JSON NOT NULL, `receivedAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `appliedAt` DATETIME(6) NULL, INDEX `sync_inbox_receivedAt_idx`(`receivedAt`), INDEX `sync_inbox_appliedAt_idx`(`appliedAt`), PRIMARY KEY (`eventId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `sync_state` ( `id` VARCHAR(191) NOT NULL, `entityType` VARCHAR(32) NOT NULL, `entityId` VARCHAR(64) NOT NULL, `appliedVersion` INTEGER NOT NULL, `appliedAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `watermark` BOOLEAN NOT NULL DEFAULT false, UNIQUE INDEX `sync_state_entityType_entityId_key`(`entityType`, `entityId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `like_batches` ( `id` VARCHAR(191) NOT NULL, `photoId` VARCHAR(64) NOT NULL, `sessionId` VARCHAR(64) NOT NULL, `batchId` VARCHAR(64) NOT NULL, `delta` INTEGER NOT NULL, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), INDEX `like_batches_photoId_idx`(`photoId`), INDEX `like_batches_createdAt_idx`(`createdAt`), UNIQUE INDEX `like_batches_photoId_sessionId_batchId_key`(`photoId`, `sessionId`, `batchId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `album_stats` ( `albumId` VARCHAR(64) NOT NULL, `viewCount` INTEGER NOT NULL DEFAULT 0, `statVersion` INTEGER NOT NULL DEFAULT 0, `updatedAt` DATETIME(6) NOT NULL, PRIMARY KEY (`albumId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `visit_sessions` ( `id` VARCHAR(191) NOT NULL, `albumId` VARCHAR(64) NOT NULL, `visitorId` VARCHAR(64) NOT NULL, `lastCountedAt` DATETIME(6) NULL, UNIQUE INDEX `visit_sessions_albumId_visitorId_key`(`albumId`, `visitorId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `visit_requests` ( `requestId` VARCHAR(64) NOT NULL, `albumId` VARCHAR(64) NOT NULL, `visitorId` VARCHAR(64) NOT NULL, `counted` BOOLEAN NOT NULL DEFAULT false, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), INDEX `visit_requests_createdAt_idx`(`createdAt`), PRIMARY KEY (`requestId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `outbox_stat_events` ( `id` VARCHAR(191) NOT NULL, `kind` VARCHAR(16) NOT NULL, `albumId` VARCHAR(64) NOT NULL, `photoId` VARCHAR(64) NULL, `total` INTEGER NOT NULL, `statVersion` INTEGER NOT NULL, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `sentAt` DATETIME(6) NULL, INDEX `outbox_stat_events_sentAt_idx`(`sentAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;