【问题标题】:"Field doesn't have a default value" without strict mode没有严格模式的“字段没有默认值”
【发布时间】:2018-07-04 21:04:18
【问题描述】:

我有一个表,其中有一列由插入前触发器填充,该列设置为 NOT NULL 并且没有 DEFAULT VALUE

当我执行 INSERT TABLE 而不传递此列时,我收到错误:1364 - Field 'column_name' doesn't have a default value。我会在网上搜索解决方案并遇到这个问题:Field 'id' doesn't have a default value?。然后我检查并更改了mysql_mode:

“STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION”

到:

“NO_ENGINE_SUBSTITUTION”

但插入查询仍然返回相同的错误。


我应该怎么做才能绕过这种“严格”模式?或者是别的什么? 如果我需要包含任何配置变量,请告诉我。我正在使用 mysql 5.6.39。

【问题讨论】:

  • 如果它没有默认值但必须设置,那么它应该有什么值?该列是否有适当的理由没有默认值?看来你希望它有一个。 (否则在触发器的插入语句中包含您要插入的值。)
  • @ThorstenKettner 这是一个计算值,不能有默认值。正如我在问题上所说,它目前已由插入前触发器插入,但错误仍然存​​在。 ://
  • 啊,所以您的插入语句依赖触发器来填充列,但是尽管触发器在那里填充列,但您仍然会收到错误。大概是个bug。还是触发器没有按预期工作?你确定它在任何情况下都填满了列吗?
  • 我从 2013 年发现这篇文章:mysqlserverteam.com/…。这实际上是一个已知的错误,我将尝试更新我的mysql版本。
  • 解释和解决方法见这里:stackoverflow.com/questions/15438840/…

标签: mysql


【解决方案1】:

这是 mysql 5.6.39 版本的已知bug。并且自 5.7 版起已修复。

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 2018-03-19
    • 2014-11-09
    • 2015-07-07
    • 2019-11-22
    • 2018-07-29
    • 2018-07-09
    • 2018-07-14
    • 2020-05-29
    相关资源
    最近更新 更多