【问题标题】:MySQL insert NULL instead of 0000-00-00 dateMySQL 插入 NULL 而不是 0000-00-00 日期
【发布时间】:2015-05-21 08:10:11
【问题描述】:

我有生日列作为我表中定义的日期。当我插入一个人并留下空白的生日字段时,我得到 0000-00-00 并且我想获得 NULL 值。当我将日期插入生日时,我得到了日期,这很好。

我试过了:

Create table (
birthday DATE NULL,
birthday DATE DEFAULT NULL,
birthday DATE NULL DEFAULT NULL,
);

不起作用,请给我一些建议,在我的生日字段中获取 NULL 而不是 0000-00-00。 我的 php 脚本:

$q = "INSERT INTO users (birthday, other_column, data_registration) VALUES ('$birthday', '$other_column', NOW())

我还没有解决方案,请问有什么想法吗?

【问题讨论】:

  • 你在一个表中定义了一个同名的3列?
  • 如果您希望值为NULL,则在您的SQL 查询中传递NULL(而不是在字符串中引用)
  • 我必须在字符串中使用引号
  • 我的表有105列,这里我写一个例子。
  • 您的表中有 105 列?我们需要谈谈你的桌子。

标签: php mysql date null


【解决方案1】:

您的$birthday 中有什么内容?

假设你有$birthday = null$birthday = "null",你会得到0000-00-00。这是因为当它传递给您的查询时,它变成了类似的东西(我相信它会将您的 'null'null 视为字符串,因为您在它周围有单引号):

INSERT INTO users (birthday, other_column, data_registration) VALUES ('null', '$other_column', NOW())

试试这个,$birthday 周围的 2 个单引号被删除:

$q = "INSERT INTO users (birthday, other_column, data_registration) VALUES ($birthday, '$other_column', NOW())

这是一个替代修复:

if ($birthday) {
$q = "INSERT INTO b (birthday, other_column, data_registration) VALUES ('$birthday', '$other_column', NOW())";
} else {
$q = "INSERT INTO b (birthday, other_column, data_registration) VALUES (DEFAULT, '$other_column', NOW())";
}

【讨论】:

  • $dayn=$_POST['dayn']; $monthn=$_POST['monthn']; $yearn=$_POST['yearn']; $birthday = $yearn.'-'.$monthn.'-'.$dayn;
【解决方案2】:

如果您在创建语句中使用birthday DATE DEFAULT NULL, 并使用

INSERT INTO users (other_column) VALUES ( '$other_column')

你应该得到null´inbirthday` 列。

【讨论】:

  • 我得到 0000-00-00,我想要 NULL 值,我在创建表时在生日语句中定义了 NULL DEFAULT NULL
【解决方案3】:

如果你想在表中显式插入空值,那么你需要从 PHP 中插入空值。

如果您想让表采用其默认值,则要么完全省略插入子句中的列,要么使用文字DEFAULT 应用默认值。

例如

CREATE TABLE Person
(
    Name VARCHAR(20),
    BirthDate DATE DEFAULT NULL -- Redundant, since a NULLABLE column will default NULL
);

INSERT INTO Person(Name) VALUES('Joe'); -- Default, NULL
INSERT INTO Person(Name, BirthDate) VALUES('Joe', NULL); -- Explicit Null
INSERT INTO Person(Name, BirthDate) VALUES('Joe', DEFAULT); -- Default, NULL

SqlFiddle example here

如果您在 PHP 中插入的日期是 0000-00-00,那么您需要在代码中应用逻辑以替换 NULLDEFAULT 或省略该列(或者我猜使用触发器,但这是一个 hack)

【讨论】:

  • 当我必须插入生日值时发生了什么?行得通吗?
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 2017-09-21
相关资源
最近更新 更多