mysql日期格式转换,存储过程还是php?

时间:2014-04-24 19:47:16

标签: php mysql stored-procedures

我需要转换日期 DD Month, YYYYYYYY-MM-DD将存储在MySQL表中。 我用PHP函数执行此操作,但我想知道db本身是否修改它是否更好。存储过程,也许?

3 个答案:

答案 0 :(得分:1)

我会在PHP中处理它。如果始终以date格式将YYYY-MM-DD值传递给数据库,则会更简单。我建议不要使用数据库来转换字符串格式,无论是对数据库进行额外的往返转换,还是转换是在SQL中完成的。

有足够的工作来使数据库代码正确。

如果你单独调用进行转换,那就是额外往返数据库的开销,以及准备语句,绑定参数,执行,检索结果集的所有PHP代码。

您建议添加存储过程,这在数据库中是不必要的;另一个必须维护的对象,可能在多个数据库中。

如果在SQL中进行转换,则会增加额外的函数调用和复杂性......数据库应如何处理无效的日期值'Feb 30, 2014'。处理是否适合您的应用程序,以及MySQL设置如何影响该行为。

我认为你可以更好地处理PHP中的转换和验证,在那里你有更多的控制权。


话虽如此,可以在MySQL中进行转换。最简单的方法是使用STR_TO_DATE功能。您需要指定字符串的格式,并且该函数在无法确定预期日期时返回NULL,并返回“无效”日期值,例如

STR_TO_DATE('Frumiest 22, 2011','%M %d, %Y')    = NULL
STR_TO_DATE('February 30, 2012','%M %d, %Y')    = '2012-02-30'

如何处理“无效日期”值并将其存储在DATE列中取决于MySQL的版本,是否启用“严格”模式,ALLOW_INVALID_DATES变量的设置等。

答案 1 :(得分:0)

mysql_query("UPDATE `Table` SET `date` = STR_TO_DATE(`date`, '%d-%m-%Y')");

答案 2 :(得分:0)

UPDATE `Table` 
SET `date` = DATE_FORMAT(STR_TO_DATE(`date`, '%d %M, %Y'), '%Y-%m-%d')