Node.js 正在将TypeForm中的bigint保存到SQL Server数据库-参数“0”的验证失败。值必须介于-2147483648和2147483647之间(包括这两个值)
节点mssql驱动程序在指定为bigint的列上错误地调用常规大小的int验证,这看起来很乏味。我已签入SQL Server数据库,并验证创建的列是bigint,并且我在azure data studio中使用大int(例如,大于40亿的值)对此数据库进行的任何查询都会成功 我定义了这个类型实体:Node.js 正在将TypeForm中的bigint保存到SQL Server数据库-参数“0”的验证失败。值必须介于-2147483648和2147483647之间(包括这两个值),node.js,sql-server,typescript,typeorm,tedious,Node.js,Sql Server,Typescript,Typeorm,Tedious,节点mssql驱动程序在指定为bigint的列上错误地调用常规大小的int验证,这看起来很乏味。我已签入SQL Server数据库,并验证创建的列是bigint,并且我在azure data studio中使用大int(例如,大于40亿的值)对此数据库进行的任何查询都会成功 我定义了这个类型实体: export class Employee extends BaseEntity { @PrimaryColumn('bigint') id: number; ... 当我试图保存该员工时,
export class Employee extends BaseEntity {
@PrimaryColumn('bigint')
id: number;
...
当我试图保存该员工时,我收到以下错误消息:
选择Employee.id作为Employee\u id。。。来自@0中employee.id所在的employee-参数:[4382863930]
错误:RequestError:参数“0”的验证失败。值必须介于-2147483648和2147483647之间(包括这两个值)
我不确定我是否只是遗漏了一些东西,或者需要指定有关实体上列的更多信息,或者这是否是typeorm的真正问题,您可以使用typeorm提供的转换功能。 在这种特殊情况下,你可以用这样的代码 transformer:ValueTransformer | ValueTransformer[]-指定在读取或写入数据库时用于解组此列的值转换器或值转换器数组。对于数组,值转换器将按从entityValue到databaseValue的自然顺序应用,并按从databaseValue到entityValue的相反顺序应用
import { BaseEntity, PrimaryColumn, ValueTransformer } from "typeorm";
export const bigint: ValueTransformer = {
to: (entityValue: number) => entityValue.toString(),
from: (databaseValue: string): number => parseInt(databaseValue, 10)
};
export class Employee extends BaseEntity {
@PrimaryColumn('bigint', { transformer: [bigint] })
id: number;
}
bigint`bigint-2^63-9223372036854775808到2^63-1 9223372036854775807`的大小限制不是吗?听起来像是冗长和/或打字形式中的一个bug。建议您询问他们的GitHub回购协议。