每当我尝试使用sequelize插入大于~50k的浮点数时,数据库就会填充其他内容。
对于这个值123456789.123456,我得到这个插入的11186.78219。
其他一些同事在其他输入方面得到了不同的输出,但接近于11186.78219 (如11177.782191683797 )。我不知道这意味着什么。
当我通过node-mssql客户端执行相同的插入时,一切都很好,这也可以通过内部续集来使用。
因此,我从Sequelize的模型的create语句,通过node-mssql,通过乏味的,直到node.js网络请求库,跟踪了执行路径,以确保我的初始输入号始终保持不变。
但是,在发送请求之后,发生了一些事情,数据库接收到了不同的值。
直接在数据库上设置一个大值并通过Sequelize检索它也很好。
我创建这个回购是为了看看是否有人可以复制它。
编辑:我想我应该澄清我是如何使用Sequelize :)
这是一个失败的示例用户模型和创建:
const User = sequelize.define('User', {
networth: {
type: DataTypes.FLOAT,
// none of these work
// type: DataTypes.FLOAT(20, 5),
// type: DataTypes.DECIMAL(20, 5),
// type: DataTypes.DOUBLE,
},
}, {
timestamps: false,
});
User.create({ networth: 123456798.123456 });不过,这个node-mssql示例可以工作:
await pool.request()
.input('networth', sql.Float, float_value)
.query(`insert into users (networth) values (@networth)`)编辑2:我从Server抓取了一些数据,显示了Sequelize调用和node-mssql调用之间的区别:
节点-mssql:exec sp_executesql @statement=N'insert into users (networth) values (@networth)',@params=N'@networth float',@networth=123456798,123456
续写:exec sp_executesql @statement=N'INSERT INTO [Users] ([networth]) OUTPUT INSERTED.* VALUES (@0);',@params=N'@0 numeric(30, 15)',@0=11186.782191684157440
所以数据确实坏了..。
编辑3:我想我找到了问题的根源,我打开了一个问题这里。
发布于 2020-04-09 16:59:26
因此,它是主分支上的后缀v5和它被解决了上的一个bug。我计划提交一个PR,以便将其集成到v5中。
发布于 2020-04-08 20:31:35
复制是给我的。运行该应用程序,并捕获了Profiler中的流量。应用程序发送
exec sp_executesql @statement=N'INSERT INTO [Users] ([networth]) OUTPUT INSERTED.* VALUES (@0);',@params=N'@0 numeric(30, 15)',@0=11186.782191684157440运行该应用程序后,User表包含:
id networth
----------- ----------------------
1 11186.7821916842https://stackoverflow.com/questions/61108786
复制相似问题