PHP strtotime保存false为MySQL负int

时间:2013-01-28 18:24:14

标签: php mysql int strtotime

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

3 个答案:

答案 0 :(得分:2)

没有代码,很难回答,但您可以考虑使用Ternary Operator

前:

$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
祝你好运,玩得开心

答案 1 :(得分:1)

时间0000-00-00超出了strtotime的范围,该范围以1901-12-13到2038-01-19为界。它会返回破坏数据的下限。这几乎适用于所有基于UNIX time_t的函数。

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

答案 2 :(得分:0)

您是否在列上寻找默认值而只是没有向其传递日期(例如,如果未提供值,则只将所有日期设置为某个值?)

如果是这样,如果您希望默认值为0(我不确定您这样做,如果日期是无意义的话,最好允许为空,那么这应该有效吗?):

ALTER TABLE YourTable MODIFY YourColumn Default '0';

然后确保在使用失败的strtotime结果调用时不向数据库传递任何内容(或null应该没问题)(注意strtotime将不会返回Fri之前的日期的有效结果,13 1901年12月20日下午45:54因此你的发动机在这方面会失败。