我正在进行数据迁移,其中的日期显示为“0000-00-00 00:00:00”,通过strtotime()函数转换后返回false,并且在新表格的INT数据类型列中保存为-2147483648。无论我将默认值设置为0或NULL,它仍会保存为负数。我不想为每个日期字段编写异常处理程序(也没有更改数据类型的选项),因此是否有一种简单的方法可以在PHP(使用一行代码)或MySQL中设置这些“空”日期的默认值?
没有代码很难回答,但您可以考虑使用三元运算符。
例如:
$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
祝你好运,玩得开心
时间0000-00-00
超出了strtotime
的范围,该范围由1901年12月13日到2038年01月19日限定。它会返回您损坏数据的下限。这对于几乎所有基于UNIX的time_t
函数都是常见的。
我的建议是在处理之前用NULL
替换这些日期。它们是无效的。
ALTER TABLE YourTable MODIFY YourColumn Default '0';
然后,请确保在使用失败的strtotime
结果调用数据库时不要传递任何内容(或者可以传递null)。请注意,strtotime
将不会为1901年12月13日20:45:54 UTC之前的日期返回有效结果,因此您的0000-00-00将在此情况下正确地失败。