Node.js项目中SQL出现updated_at相关语法错误如何修复?
问题诱因
这个SQL语法错误由TypeORM生成更新语句的逻辑缺陷导致,核心触发原因有两个:
- 执行更新操作时,仅需要更新系统自动维护的
updated_at字段,没有显式传入任何业务更新字段,旧版本TypeORM生成SET语句时会在开头多出一个多余的逗号,直接拼接updated_at赋值逻辑,导致SQL语法非法 - 你使用的
updated_at字段为带6位微秒精度的时间类型,TypeORM默认生成的CURRENT_TIMESTAMP未携带精度参数,与MariaDB的字段要求不匹配,也会触发语法或兼容错误
修复方案
你可以根据自己的使用场景选择以下任意一种方案:
- 显式传入
updated_at字段赋值,避免空更新对象
执行更新时不要传入空的更新参数,手动指定updated_at的值即可,示例代码:await yourRepository.update( { id: In([3]) }, { updated_at: new Date() } ) - 调整字段注解配置,适配MariaDB时间精度要求
修改@UpdateDateColumn的配置,显式指定字段类型、精度和自动更新规则:@CreateDateColumn({ type: 'timestamp', precision: 6, default: () => 'CURRENT_TIMESTAMP(6)' }) created_at: Date @UpdateDateColumn({ type: 'timestamp', precision: 6, default: () => 'CURRENT_TIMESTAMP(6)', onUpdate: 'CURRENT_TIMESTAMP(6)' }) updated_at: Date - 升级TypeORM到最新稳定版
该空更新生成多余逗号的问题已经在后续版本修复,升级TypeORM即可从底层解决问题
内容的提问来源于stack exchange,提问作者yrbet
相关产品推荐
相关产品推荐

