【问题标题】:MySQL Default Value IssueMySQL 默认值问题
【发布时间】:2010-11-30 00:32:51
【问题描述】:

在 MySQL 中,整数字段的默认值为 0。在插入期间,该字段的值为 NULL,并且 NULL 被插入。我使用该字段的值进行一些算术运算,例如加法、乘法、除法。这会导致错误,因为插入了 NULL。如何解决这个问题?如果它们的插入值为空,数据库不支持整数、小数等字段的默认值(可能不适用于字符串类型,因为 NULL 对字符串有效)。如果不是,那么对于 Numeric 类型具有 NULL 值是否正确?

由于某种原因,当我有一个 NOT NULL 和 DEFAULT VALUE 为 0 的十进制字段时,插入失败并显示错误消息“第 1 行的列 'Column_Name' 的数据被截断”。

如果我删除 NOT NULL 属性,则插入成功,消息与警告相同。

插入该十进制字段的值是 AVG() MySql 函数的结果

真是一头雾水……

可能是什么原因?

【问题讨论】:

    标签: mysql null default-value


    【解决方案1】:

    要插入默认值,您不必为该列指定任何值,甚至不能指定 NULL,因为 NULL 是一个特定值。

    【讨论】:

    • 就我而言,我有一个保存到数据库中的 spring 数据对象。任何字段的默认值为 null。每当 repo 将对象保存到数据库中时,它都会保存值 null 而不是我在架构中指定的默认值,并且我不断收到 SQL 错误,抱怨插入 null 值。然后我终于意识到默认值是由缺少字段而不是字段为空来使用的。
    【解决方案2】:

    NULL 是任何 mysql 列/类型的正确值。

    您可以将该列设置为 NOT NULL,或者您需要用您的脚本语言对其进行解析,因此不会插入 null。

    【讨论】:

    • 当我设置 NOT NULL 属性时,在插入过程中会抛出“Data truncated for the column_name at row1”错误并且没有插入任何行
    • 对,因为不允许为null,mysql会截断插入的行。您需要在脚本中解决此问题或配置 mysql 以允许此操作(尽管我不确定 mysql 配置中是否有这样的选项)
    • 具有 NOT NULL 和默认值的字段不应引发错误,因为如果 NOT NULL 失败,我已设置默认值。不应该尝试插入默认值吗?
    【解决方案3】:

    您可以将字段设置为NOT NULL 以完全避免此问题。如果不需要 NULL 值,那么您应该这样做。当列为NOT NULL 时,插入类型的默认值(整数为0)而不是NULL

    【讨论】:

    • 当我设置 NOT NULL 属性时,在插入过程中会抛出“第 1 行的 column_name 的数据被截断”错误,并且没有插入任何行
    【解决方案4】:

    您必须在创建表结构时为其指定默认值“0”。或者您可以使用以下方法更改它:

    ALTER TABLE `TableName` CHANGE `FieldName `FieldName` INT( 11 ) NULL DEFAULT '0'

    希望这会有所帮助。

    【讨论】:

    • 你的语句中有一个额外的单引号,否则 +1。
    • 但是仍然使用默认值并没有解决这个问题..!
    • 你的意思是,已经存在的价值?如果你,你可以使用 Update 来改变一切,像这样:“UPDATE TableName SET FieldName = '0' WHERE FieldName IS NULL”。
    • 我能够更改现有的空值,但是当我插入时出现与截断相关的错误,正如我在其他 cmets 中提到的那样
    【解决方案5】:

    如果您的计算没有问题,请将列定义更改为 NOT NULL DEFAULT 0,那么您将始终拥有正确的整数(或小数)。但是您需要记住将旧值从 null 更改为 0。

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多