【问题标题】:Why am I unable to set false (0) as a default value for my table using Knex?为什么我无法使用 Knex 将 false (0) 设置为我的表格的默认值?
【发布时间】:2020-05-14 11:14:50
【问题描述】:

我一直在使用带有 node/express 的 Knex 来构建我的数据库,我遇到了一个问题,当我为布尔值设置默认值时,它总是返回 null。 (使用 sqlite)

exports.up = async function(knex) {
    await knex.schema.createTable("users", (table) => {
        table.increments()
        table.boolean("admin")
            .notNullable()
            .defaultTo(false) // this is throwing an error.  Not defaulting to false.
    })
};

我也尝试过使用 0 而不是 false,因为我知道它通常默认为 1 和 0 来表示 true 和 false,但无论我输入 true/false || 它仍然返回 null 1/0。

是否有人认为为什么它默认为 null 而不是 true 或 false?

【问题讨论】:

    标签: javascript node.js sqlite knex.js


    【解决方案1】:

    SQlite 驱动不支持自动转换 javascript boolean -> 0/1。它也不转换batabase-boolean -> js true/false,因为sqlite根本没有布尔数据类型,而是用整数代替它。

    https://www.sqlite.org/datatype3.html

    table.boolean("admin")
                .notNullable()
                .defaultTo(0)
    

    应该可以,但是如果您打算使用 sqlite 作为主数据库,您实际上可能会考虑使用整数类型而不是布尔类型。

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2014-06-23
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多