typeORM报 QueryFailedError: Data truncated for column ‘role’ at row 3
今天博主在拉下项目后配置完数据库文件后发现TypeORM连接不上数据库。紧接着报QueryFailedError: Data truncated for column 'role' at row 3
这个错误。
这个问题一出来,必须得把锅推给TypeORM
。
该错误提示为“数据被截断,无法写入’role’列”。通常情况下,该错误是由于数据超过了该列的最大长度或类型不匹配所引起的。建议检查列的定义和数据类型,确保输入的数据不会超出该列的长度。
但由于博主使用的是NestJS框架集成TypeORM来操作数据库,所以这个问题肯定是TypeORM的问题。
遇到这个问题,有两种解决办法:
方法一:
修改TypeORM连接配置,不要让TypeORM对数据库进行热更新;修改连接参数
export const AppDataSource = new DataSource({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'password',
database: 'xxxxx',
// charset: 'utf8mb4',
timezone: '+08:00',
synchronize: false, // 取消同步,修改为false
logging: false,
entities: [Admin, Role, Buildequ, Equtype], // 数据表实体
});
将
synchronize
参数修改为false,不要让TypeORM去操作数据库
方法二:
查看数据库中是否已经存在项目需要的数据库,同时检查数据库表里字段的排序是否和实体定义时候的顺序一致。
比如一个实体:
import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn } from 'typeorm';
import { ApiProperty } from '@nestjs/swagger';
/**
* 健身器材类型实体
*/
@Entity('equType')
export class Equtype {
@ApiProperty({ description: 'id' })
@PrimaryGeneratedColumn('uuid')
id: string;
@ApiProperty({ description: '类型名称' })
@Column({ length: 255 })
name: string;
@ApiProperty({ description: '状态:0-未启用,1-启用' })
@Column({ type: "enum", enum: [0, 1], default: 1 })
status: number;
@CreateDateColumn()
add_time: Date
}
那么TypeORM在操作数据自动建表的时候(前提是synchronize属性设置为true
),它建表时候的属性的顺序是按着文件从上往下开始建表的。
id | name | status | add_time |
---|---|---|---|
1 | 名称 | 1 | 2023-06-03 |
倘若之前有数据库文件,但某个表的顺序不一致,就会报这个错误!解决办法也很简单,数据库文件备份
,删除数据库中的表,让TypeORM自动帮你建一个。
评论区