Php 在MySQL表中,为列指定默认值很重要吗?为什么?

Php 在MySQL表中,为列指定默认值很重要吗?为什么?,php,mysql,validation,default,Php,Mysql,Validation,Default,当我更新MySQL表中的行时,会收到一条警告:“字段xyz没有默认值”。这是真的;没有。我在PHP代码中验证从MySQL获得的所有数据 MySQL警告我的事实让我想知道:为所有列指定默认值是否重要?如果是,为什么?演出可预测的行为?呼叫代码的简化?其他我不知道的最佳实践或问题?显然,您正在将列声明为非NULL。这是允许的,也是合理的。但是,当您向表中插入新行时,MySQL需要知道值是什么。以下是三种输入值的方法: 在insert语句中,可以显式列出一个值 在createtable语句中,可以有

当我更新MySQL表中的行时,会收到一条警告:“字段xyz没有默认值”。这是真的;没有。我在PHP代码中验证从MySQL获得的所有数据


MySQL警告我的事实让我想知道:为所有列指定默认值是否重要?如果是,为什么?演出可预测的行为?呼叫代码的简化?其他我不知道的最佳实践或问题?

显然,您正在将列声明为
非NULL
。这是允许的,也是合理的。但是,当您向表中插入新行时,MySQL需要知道值是什么。以下是三种输入值的方法:

  • insert
    语句中,可以显式列出一个值
  • createtable
    语句中,可以有一个默认值<如果未列出,则默认为code>NULL
  • 该表可以有一个指定列值的
    insert
    触发器
因为MySQL将使用
NULL
作为默认值,所以只有当列中不允许
NULL
时,才会出现错误

编辑:

最初的答案不是100%完整,因为MySQL在正常模式下使用时会生成值。这些在文档中有描述。因此,正确的第四个要点是:

  • MySQL将在大多数(但不是所有)情况下为数字插入默认值
    0
    ,为字符串插入默认值
    '

由于情况相当广泛,很可能您实际上是在严格模式下操作,或者关闭了此默认行为。

如果列没有默认值,并且您没有给它一个值,那么它的值应该是什么?如果没有合理的默认值,则不应该;e、 g.默认的出生日期应该是什么?@duffymo
NULL
。否则,您必须在每次插入时显式声明此列值,否?@Ohgodwhy同意;null是唯一有意义的东西。如果你什么也不说,MySQL就会这样假设。你可能会感到惊讶,
DATE
的默认值是
0
,除非列允许
NULL
。不同的数据类型对
非NULL
列有不同的值
NULL
只是允许
NULL
的列的默认隐式值。