用大整数续集js
sequelize js with big integers
我有一个用 Node JS 编写的应用程序,并使用 Sequelize js ORM 库访问我的数据库 MySql。
我的问题是我的数据库中有一个 BIGINT 列,当它的值很大时,我在检索它时会得到错误的值。
例如,当数据库中的值为:10205918797953057
当我使用 sequelize 获取它时,我得到 10205918797953056
。
我尝试使用 big-integer
库,但没有成功。
欢迎任何建议。
P.S: 我无法将数据类型更改为 VARCHAR。
您应该在 mysql 模块上启用 supportBigNumbers
并可能启用 bigNumberStrings
:https://github.com/felixge/node-mysql#connection-options
new Sequelize(..., {
dialect: 'mysql',
dialectOptions: {
supportBigNumbers: true
}
});
Jan Aagaard Meier 的回答是正确的并且有效,但是需要考虑的事情很少。
根据Sequelize Docs (connection-options):
supportBigNumbers
:当处理数据库中的大数字(BIGINT 和 DECIMAL 列)时,您应该启用此选项(默认值:false)。
bigNumberStrings
:同时启用 supportBigNumbers
和 bigNumberStrings
强制大数字(BIGINT 和 DECIMAL 列)始终 returned 作为 JavaScript 字符串对象(默认值:false
)。启用 supportBigNumbers
但禁用 bigNumberStrings
将 return 大数字作为 String 对象仅当它们不能用 JavaScript Number objects 准确表示时(当它们超过 [-2^53 , +2^53] 范围),否则它们将被 returned 作为 Number 对象。如果禁用 supportBigNumbers
,则忽略此选项。
因此,在某些情况下,要正确处理 returned 值,请同时使用
bigNumberStrings
和 supportBigNumbers
可能是更好的选择
保证 return.
中的字符串值
我有一个用 Node JS 编写的应用程序,并使用 Sequelize js ORM 库访问我的数据库 MySql。
我的问题是我的数据库中有一个 BIGINT 列,当它的值很大时,我在检索它时会得到错误的值。
例如,当数据库中的值为:10205918797953057
当我使用 sequelize 获取它时,我得到 10205918797953056
。
我尝试使用 big-integer
库,但没有成功。
欢迎任何建议。
P.S: 我无法将数据类型更改为 VARCHAR。
您应该在 mysql 模块上启用 supportBigNumbers
并可能启用 bigNumberStrings
:https://github.com/felixge/node-mysql#connection-options
new Sequelize(..., {
dialect: 'mysql',
dialectOptions: {
supportBigNumbers: true
}
});
Jan Aagaard Meier 的回答是正确的并且有效,但是需要考虑的事情很少。
根据Sequelize Docs (connection-options):
supportBigNumbers
:当处理数据库中的大数字(BIGINT 和 DECIMAL 列)时,您应该启用此选项(默认值:false)。
bigNumberStrings
:同时启用 supportBigNumbers
和 bigNumberStrings
强制大数字(BIGINT 和 DECIMAL 列)始终 returned 作为 JavaScript 字符串对象(默认值:false
)。启用 supportBigNumbers
但禁用 bigNumberStrings
将 return 大数字作为 String 对象仅当它们不能用 JavaScript Number objects 准确表示时(当它们超过 [-2^53 , +2^53] 范围),否则它们将被 returned 作为 Number 对象。如果禁用 supportBigNumbers
,则忽略此选项。
因此,在某些情况下,要正确处理 returned 值,请同时使用
bigNumberStrings
和 supportBigNumbers
可能是更好的选择
保证 return.