重命名后自动递增的字段没有默认值

No default for field with auto increment after renaming

我需要重命名我的一个 table 和这个 table 中的一个列。

我已经用 knex migration 的下一个方法完成了:

.alterTable('tableToRename', table => {
    table.dropForeign('id_reference1');
    table.dropForeign('id_reference2');
})
.alterTable('relatedTable1', table => {
    table.dropForeign('tableToRename_id_col');
})
.renameTable('tableToRename', 'newName')
.alterTable('newName', table => {
    table.renameColumn('tableToRename_id_col', 'tableToRename_new_id_col');
})
.alterTable('relatedTable1', table => {
    table.renameColumn('tableToRename_id_col', 'tableToRename_new_id_col');
    table.foreign('tableToRename_new_id_col').references('newName.tableToRename_new_id_col');
})
.alterTable('newName', table => {
    table.foreign('id_reference1').references('table3');
    table.foreign('id_reference2').references('table4');
})

所以现在当我尝试向 newName 添加新记录时 table - 出现下一个错误:

错误 (1366) HY000:第 1 行的 "tableToRename_new_id_col" 列 "Incorrect integer value:"“

如何以正确的方式重命名带有 id 的自动整数列?

服务器响应下一个错误: 代码:'ER_NO_DEFAULT_FOR_FIELD', 错误号:1364, sqlMessage: '字段 \'tableToRename_new_id_col\' 没有\'t have a default value', sqlState: 'HY000', 索引:0,

UPD. 之前我创建了一个 table,我想这样重命名:

.createTableIfNotExists('tableToRename', tab => {
          t.charset('utf8mb4');
          table.bigincrements('tableToRename_id_col')
            .unsigned()
            .primary()
            .notNullable();
          table.bigint('id_reference1')
            .notNullable()
            .unsigned()
            .references('id_reference1')
            .inTable('table_reference1');
          table.bigint('id_reference2')
            .notNullable()
            .unsigned()
            .references('id_reference2')
            .inTable('table_reference2');
 });

听起来像是 knex 中的错误。如果您还没有这样做,您应该将错误报告发送给 knex issues。在那之前,您可以通过将新的 id 列设置为手动自动递增来解决它。您还可以查看使用 .toSQL() 生成的查询类型。

最好的一件事是完整的复制案例,您首先创建 table 然后更改它并显示它失败了。这样别人就可以更容易地找出确切的问题。

当您想在没有所有数据的情况下插入新位置时,这是 mysql 设置。

如果不发送值,您可以将 mysql 配置为设置 NULL。 临时解决方案(直到您重新启动服务器): 设置@@GLOBAL.sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

或者您可以在 my.ini 文件中设置它。 以下是模式详情:http://webnetkit.com/error-sqlstatehy000-general-error-1366-incorrect-integer-value-for-column/