3

我正在进行迁移,日期为 '0000-00-00 00:00:00' 并通过 strtotime() 运行并返回为 false 在新表的列中保存为 -2147483648,这是一个 INT 数据类型。无论我将默认值设置为 0 还是 NULL,它仍然保存为那个负数。我想避免必须为每个日期字段编写异常代码(并且我没有更改数据类型的选项),所以在 PHP(使用一行)或 MySQL 中有一些简单的方法可以在这些上设置默认值“空”日期?

4

3 回答 3

2

没有代码,很难回答,但您可以考虑使用三元运算符

前任:

$variable_to_write_to_db = ($field == 0 || $field == NULL ? writeDefaultsToDB() : writeToDB($field))

或类似的东西。

三元运算符的工作方式如下(从上面的链接复制):

/* most basic usage */
$var = 5;
$var_is_greater_than_two = ($var > 2 ? true : false); // returns true

祝你好运,玩得开心

于 2013-01-28T18:34:01.273 回答
1

时间0000-00-00超出了strtotime1901-12-13 到 2038-01-19 的范围。它正在返回损坏数据的下限。这对几乎所有基于 UNIXtime_t的函数都很常见。

我的建议是在处理之前替换这些日期NULL。它们无效。

于 2013-01-28T18:28:13.887 回答
0

您是否正在寻找列上的默认值并且只是不将日期传递给它(即,如果未提供值,只需将所有日期设置为某个值?)

如果是这样,如果您希望默认值为 0,这应该可以工作(我不确定您是否这样做,如果日期是无意义的,最好允许 null ?):

ALTER TABLE YourTable MODIFY YourColumn Default '0';

然后确保在调用失败strtotime结果时没有将任何内容(或 null 应该可以)传递给数据库(注意strtotime不会返回 1901 年 12 月 13 日星期五 20:45:54 UTC 之前的日期的有效结果,因此您的 0000-00 -00 将正确地失败)。

于 2013-01-28T18:34:40.937 回答