侧边栏壁纸
  • 累计撰写 17 篇文章
  • 累计创建 7 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

typeORM报 QueryFailedError: Data truncated for column ‘role’ at row 3

抗争的小青年
2023-06-03 / 0 评论 / 0 点赞 / 445 阅读 / 603 字
温馨提示:
感谢您的阅读,若在文中留有不当引用,请及时联系管理

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自动帮你建一个。

0

评论区