如何在mysql中使用枚举数组作为TypeORM

How to use enum array in mysql as TypeORM

提问人:ShinDongJun 提问时间:10/17/2023 更新时间:10/17/2023 访问量:40

问:

我正在使用 NestJS,我正在用 typeorm 制作一个实体。 为 user.entity 创建角色时出现问题。

如果使其像附加的代码一样,则将收到如下所示的mysql语法错误。(代码阶段中没有 typeorm 语法错误。因为 mysql 不支持枚举数组。

@Entity('user')
export class UserEntity extends CoreEntity {
  ...

  @Column({
    type: 'enum',
    enum: Role,
    array: true,
    default: [Role.User],
  })
  @IsString()
  public roles!: Role[];

  ...
}

查询失败:ALTER TABLE ADD 枚举数组 ('User', 'Admin') NOT NULL DEFAULT 'User' 错误:userroles

错误:您的 SQL 语法中有错误;检查与您的MySQL服务器版本相对应的手册,了解在'array ('User', 'Admin') NOT NULL DEFAULT 'User'' at line 1

我想了几种解决方案。

  1. 将 RDBMS 更改为支持枚举数组的 Postgres。

  2. 分隔角色表,并使用用户 N:M 联接。

  3. 另存为字符串类型,并在加载时注入拆分转换。

  4. 我把它变成一个对象,并将其保存为json类型。

我想知道什么是正确的解决方案......

mysql 数组 枚举 nestjs typeorm

评论

0赞 Akina 10/17/2023
该关键字在 SQL 代码中明显错误。你确定这是正确的吗?ENUM 数据类型为标量 1。arrayarray: true
0赞 ShinDongJun 10/18/2023
也许这是DBMS的一个特点。我认为支持typeform的postgres等数组的DBMS也可用。
0赞 Akina 10/18/2023
ORM不区分DBMS是否支持数组数据类型?我建议使用另一个ORM..那些至少产生当前 DBMS 不支持此属性的消息。
0赞 ShinDongJun 10/22/2023
我也这么认为......你能推荐其他ORM吗?

答: 暂无答案