如何在MySQL日期类型字段中插入空值?

20

如何在mysql日期类型字段中插入NULL或空值(NULL = 是)。

如果我尝试插入一个空值,它会插入0000-00-00,但我想保持为空或NULL。

谢谢帮助。

更新

请注意,我已将默认值设置为NULL。

  `payment_due_on` date DEFAULT NULL,

好的,没问题

现在我已经让它工作了

function get_mysqlDate($date, $delimiter='/') {
    if(check_empty($date)) {
        return 'NULL';
    }
    list($d, $m, $y) = explode($delimiter, $date);
    //$datetime = strtotime($date);
    return "'".date('Y-m-d', mktime(0,0,0,$m, $d, $y))."'";
}




"... SET mydate = ".get_mysqldate($_POST['mydate'])." ...."

干杯


你是实际插入了一个空字符串还是真的NULL?(或者什么都没有指定)也许空字符串被解释为0000-00-00。 - HerdplattenToni
这解决了我的问题... - Mohammed Sufian
3个回答

25

如果发生这种情况,那么原因是该列已使用 NOT NULL default'0000-00-00'进行定义。您需要更改列定义以允许 NULL 并且没有默认值。

如果您所说的“空值”是指'',那么您的插入语句应该指定 NULL


我已经提到过,我将NULL设置为是,并将默认值也设置为NULL。 - TigerTiger
3
你的语句里使用的是NULL而不是'NULL'吗?比如:"INSERT ... VALUES (NULL, 1, 2)" - VolkerK

2

哎呀,这个空值问题让我有些苦恼。

我的一个 PHP 脚本从数据库 A 复制、格式化和存储数据到数据库 B。在数据库 A 中有一个日期字段包含 NULL 值,但当我复制它时,在数据库 B 中该字段变成了 0000-00-00。

最后发现问题出在我将 NULL 值用单引号括起来了,像这样:('NULL')。

$started_date = mysql_result($databaseA['result'],$i,"start_date");

    if (empty($published_at_date)){
     $insert_sql .= "NULL,  ";
    } 
    else 
    {
     $insert_sql .= " '" . mysql_real_escape_string($started_date) ."', ";
    }

这个方法解决了问题。

0

在进行插入操作时,只需省略该字段即可。

假设您的表格如下:

CREATE TABLE mytable(
`name` VARCHAR(30) NOT NULL,
`payment_due_on` date DEFAULT NULL);

如果您想插入没有日期的内容,请使用:

INSERT INTO mytable (name) VALUES ('name here');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接