【问题标题】:Running into a Knex.js & MySql Error when adding json Column添加 json 列时遇到 Knex.js & MySql 错误
【发布时间】:2021-04-19 11:05:18
【问题描述】:

我不确定我在这里做错了什么,但是我在迁移中添加了一个 jsonb 列并且我一直遇到错误:

我还尝试了常规的 .json 列以及 knex 描述的here。 但这似乎也不起作用。 文档中有一段说:

对于PostgreSQL,由于原生数组和json类型不兼容,当设置一个数组(或者可以是数组的值)为json或jsonb列的值时,应该使用JSON.stringify()进行转换在将值传递给查询生成器之前将其值传递给字符串,例如

我想既然我没有使用 PostgreSQl,我是否将其字符串化并不重要,但是我确实尝试过对数据进行字符串化,可惜在我的情况下无济于事。

我遇到的错误:

错误:ER_WRONG_VALUE_COUNT_ON_ROW:列数与值不匹配 在第 1 行计数

我在此示例中添加了许多列,以使其尽可能接近我的代码以帮助调试。 下面是我的代码:

exports.up = (knex) => {
  return knex.schema.createTable("foo", (table) => {
    table.increments("id").primary();
    table.string("bar").notNullable();
    table.decimal("fiz", 14, 2).notNullable().defaultTo(20);
    table.decimal("buzz", 14, 2).defaultTo(0);
    table.decimal("biz", 14, 2).defaultTo(0);
    table.string("foobar").notNullable();
    table.jsonb("error").notNullable();
  });
}; 

我的种子数据看起来像:

 {
    id: 1,
    bar: "example",
    fiz: 1234,
    buzz: 1234,
    biz: 1234,
    foobar: "example",
    error: {
      data1: "data",
      data2: "data",
    },
  },

依赖版本:

"mysql": "^2.18.1",
"knex": "^0.21.12",
"bookshelf": "^1.2.0",

有人可能会发现我的代码有问题吗?

【问题讨论】:

    标签: mysql database mysql-workbench knex.js


    【解决方案1】:

    Knex 插入时不知道列的类型,因此,它不知道在将它们发送到数据库之前将它们转换为字符串。

    Mysql json 列期望将 JSON 作为字符串获取,在将其传递给 insert 之前尝试调用 JSON.stringify(error)

    Knex('table').insert(
     {
        id: 1,
        bar: "example",
        fiz: 1234,
        buzz: 1234,
        biz: 1234,
        foobar: "example",
        error: JSON.stringify({
          data1: "data",
          data2: "data",
        }),
      },
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 2016-02-11
      • 2016-11-16
      • 1970-01-01
      相关资源
      最近更新 更多