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