【问题标题】:Mysql int field with default null is set to 0Mysql int 字段默认为 null 设置为 0
【发布时间】:2015-01-14 14:45:13
【问题描述】:

Mysql 表有问题。首先我的服务器版本5.6.17 和我使用PHPmyadmin 4.2.0 在PHP 版本5.5.12 和PHPmyadmin 使用的数据库客户端上管理它:Database client version: libmysql - mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $ 和使用的PHP 扩展是在phpmyadmin mysqli

问题是当使用默认值 null 将数值字段更改或设置为 int 或 float 并且它接受 null 值时,对于没有提供数据的字段,它将其设置为 0

我使用以下 SQL:

ALTER TABLE `country` CHANGE `area` `area` INT(11) NULL DEFAULT NULL;

我希望在没有数据的字段中看到NULL,而不是看到0,因为这会在应用程序检查NULL值但发现它为0时出现一些问题。我试图寻找来自MySQL的任何公告关于与所考虑版本相关的任何错误,但我找不到任何东西。

【问题讨论】:

  • 现有的0 值将不会更改为null。只有未来的值是null
  • 我不清楚你描述的最后一部分。您是否发现表中现有数据存在问题?如果是,您能否给我们一些现有数据的示例,并告诉我们更改后的样子? (此外,如果您实际上并未重命名列,则可能需要使用 MODIFY 而不是 CHANGE)
  • @juergend 哦!我找到了,看来我的应用程序以前以某种方式更改了字段的值并将其应用于所有行。谢谢你。为了测试,我创建了新字段,并且正如您所说,它已默认设置为 NULL。我使用下面的答案来修复表格。

标签: php mysql mysqli phpmyadmin mysql-5.6


【解决方案1】:

这不是错误,您的旧值是 0(有效整数)。特征值将为 NULL。 如果 0 是您的应用程序的正常值,那么您就有问题了。 如果 0 不是您的应用程序的预期值,只需将您的 0 值更新为 NULL。

UPDATE country SET `area` = NULL WHERE `area` = 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2013-01-12
    • 1970-01-01
    • 2014-12-20
    • 2022-12-30
    • 1970-01-01
    相关资源
    最近更新 更多