TypeORM对接MariaDB使用UUID作为主键时User表主键生成异常问题
问题原因确认
该现象和使用MariaDB无关,不属于数据库适配差异导致的问题,是TypeORM的编译加载、同步逻辑导致的异常。
解决步骤
- 第一步:清理旧编译产物
你配置的entities加载路径为dist/src/**/*.entity.js,即加载编译后的JS实体文件。如果之前User实体曾经使用默认自增主键配置,修改为UUID后没有全量重新编译,dist目录下残留的旧实体文件会导致TypeORM读取到错误的配置。
执行以下操作清理:
# 删除旧编译产物 rm -rf dist # 全量编译TypeScript npm run build
- 第二步:重建异常表
TypeORM的synchronize: true配置为增量同步,不会主动修改已存在的表主键类型,避免触发数据丢失风险。需要先手动删除数据库中已生成的异常Users表,重启应用后TypeORM会自动按照最新实体配置重建表。 - 第三步:(可选)显式指定主键类型避免适配异常
如果上述操作后问题仍然存在,可以给主键字段显式指定类型,降低TypeORM自动适配的误差:
@PrimaryGeneratedColumn('uuid', { type: 'char', length: 36 }) id: string;
额外注意事项
synchronize: true配置仅适合开发环境使用,生产环境请关闭该配置,改用迁移(Migration)工具管理表结构变更,避免意外丢失数据。
内容的提问来源于stack exchange,提问作者Toby Boulton
相关产品推荐
相关产品推荐

