-- 注意:Prisma 生成的 MySQL DDL 固定写 utf8mb4_unicode_ci,会覆盖库级 -- utf8mb4_0900_bin;账号/token 的大小写敏感语义依赖 bin collation,故手工 -- 改写为 utf8mb4_0900_bin(后续迁移同样需要复核 CREATE TABLE 的 collation)。 -- CreateTable CREATE TABLE `users` ( `id` VARCHAR(191) NOT NULL, `account` VARCHAR(64) NOT NULL, `passwordHash` VARCHAR(255) NOT NULL, `displayName` VARCHAR(128) NOT NULL, `role` VARCHAR(191) NOT NULL DEFAULT 'staff', `sourceStatus` VARCHAR(191) NOT NULL DEFAULT 'local', `localLocked` BOOLEAN NOT NULL DEFAULT false, `credentialStatus` VARCHAR(191) NOT NULL DEFAULT 'active', `locale` VARCHAR(16) NULL, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), UNIQUE INDEX `users_account_key`(`account`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `sessions` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `tokenHash` VARCHAR(64) NOT NULL, `expiresAt` DATETIME(6) NOT NULL, `revokedAt` DATETIME(6) NULL, UNIQUE INDEX `sessions_tokenHash_key`(`tokenHash`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- CreateTable CREATE TABLE `audit_logs` ( `id` VARCHAR(191) NOT NULL, `actorId` VARCHAR(191) NULL, `action` VARCHAR(64) NOT NULL, `resourceId` VARCHAR(64) NULL, `metadata` JSON NULL, `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; -- AddForeignKey ALTER TABLE `sessions` ADD CONSTRAINT `sessions_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `audit_logs` ADD CONSTRAINT `audit_logs_actorId_fkey` FOREIGN KEY (`actorId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;