MySQL插入NULL而不是0000-00-00日期

时间:2015-05-21 08:10:12

标签: php mysql date null

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

我试过了:

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

不起作用,请在我的生日字段中获取NULL而不是PIX的一些建议。 我的PHP脚本:

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

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

3 个答案:

答案 0 :(得分:3)

$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())";
}

答案 1 :(得分:1)

如果您在创建状态中使用birthday DATE DEFAULT NULL,并使用

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

你应该获得null´in生日礼物栏。

答案 2 :(得分:0)

如果要在表中显式插入null,则需要从PHP插入NULL。

如果你想让表保持默认值,那么要么完全使用insert子句中的OMIT,要么使用将应用默认值的文字DEFAULT

e.g。

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作为列,或省略列(或者我猜使用触发器,但这是一个黑客攻击)