【问题标题】:how to insert an empty value in mysql date type field?如何在mysql日期类型字段中插入一个空值?
【发布时间】:2010-11-11 09:07:28
【问题描述】:

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

如果我尝试插入一个空值,它会插入 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

标签: php mysql date


【解决方案1】:

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

您的插入也应该指定 NULL,而不是 '',如果这就是您所说的“空值”的话。

【讨论】:

  • 我已经提到我设置了 NULL = yes 并且默认值也设置为 NULL。
  • 你的语句中有NULL而不是'NULL'? "插入 ... 值 (NULL, 1, 2)"
【解决方案2】:

phew.. 有点为这个空值而苦苦挣扎。

我有一个 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) ."', ";
    }

这解决了它。

【讨论】:

    【解决方案3】:

    在插入时省略该字段。

    假设你的桌子是这样的:

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

    如果要插入不带日期的内容,请使用:

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

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      相关资源
      最近更新 更多