【问题标题】:Best format for storing dates in sql在 sql 中存储日期的最佳格式
【发布时间】:2014-01-25 22:47:15
【问题描述】:

我正在尝试优化我在 SQL/PHP 站点中使用日期的方式。我熟悉date()strtotime() 函数,并创建了在服务器端以unix 和日期时间存储数据的项目。我知道更改日期不会占用大量资源,但我正在尝试了解如何以最有效的方式编写代码。

我现在要解决的是最快/最有效的做法是在服务器上存储日期,即:SQL FROM_UNIXTIME、CONVERT、UNIX_TIMESTAMP 和 PHP strtotime 和 @ 的最有效组合是什么987654324@ 函数,用于涉及频繁 CRUD 日期字段的典型表。举个例子:

我有一个包含 3 个日期列的 SQL 表。所有这 3 个都可以由网站的多个用户定期更新,并且条目也输入如下:

mysql_query("INSERT INTO `regular` (
`regularid`,
`propertyid`,
`userid`,
`billdate`,
`billfrequency`,
`enddate`,
`amount`,
`description`,
`payee`,
`payer`,
`lastpayment` 
)
VALUES (
'', '{$_POST['propertyid']}', '$varuserid', FROM_UNIXTIME($date), '{$_POST['billfrequency']}', 'FROM_UNIXTIME($edate)', '$amount', '{$_POST['description']}', '{$_POST['payee']}', '{$_POST['payer']}', 'FROM_UNIXTIME($ldate)'
)") or die(mysql_error);

Print "A regular payment for &pound;".$_POST['amount']." has been created<br/>\n";

进入数据库,我将用户输入表单中的日期字段解析为 mm / dd / yyyy 格式的变量,使用 strtotime() 或 mktime() 函数对其进行验证,然后使用 from_unixtime 提交。

但是,然后显示我使用的数据库中的信息:

   date("d-m-Y", strtotime($val['billdate']))

这意味着我从用户那里获取 dd/mm/yyyy 日期格式,从数据库获取另一种日期格式。然后我使用 strtotime 将这些转换为 unixtime,然后使用 date 将其转换回英国日期格式 - 这肯定会加倍吗?如果不是三倍?服务器查询。

我的问题分为两部分。 首先,它是最快的a)将所有日期格式存储在sql中的unixtime中并通过服务器端查询转换为日期格式,还是b)将所有日期格式存储为日期格式并仅在访问它们时转换为unixtime

(我认为后者最好,但我上面的示例表明,即使这样做,我似乎使用的服务器时间也比我应该使用的要多)

其次,您能否指出我应该如何执行自己的脚本时间基准测试的正确方向 - 我才真正开始了解测试,因为我对 Php 还比较陌生,但我很热衷学习。

非常感谢!

【问题讨论】:

  • 您将数据与其表示混淆了。在你可以将它们分开之后 - 你不会有这样的问题
  • 好问题。您必须考虑 MySQL 的 date 函数及其日期存储格式已经针对高性能进行了优化。您最好以 date 格式存储日期,并仅在访问它们时转换为 unixtime,因为 Unix 时间格式最适合操作系统级别的操作,而不是数据库存储。

标签: php mysql sql date


【解决方案1】:

使用 MySQL 的“unix_timestamp()”,它很短,可以通过使用 php、bash 等在一秒钟内转换为可读的完整日期。

【讨论】:

  • 就像使用 unix_timstamp() 从服务器检索并以日期格式而不是 unix 格式存储数据一样?这是否意味着 unix_timstamp() 明显比 strtotime 快?无论哪种方式,这仍然需要我将 dd/mm/yyyy 用户输入转换为 unix 格式以输入数据库,并在检索时再次从 unix 转换为 datetime....更新时需要执行两次(数据检索和条目),如果更新 3 个日期字段,这意味着 6 大量重复...
猜你喜欢
  • 1970-01-01
  • 2010-10-05
  • 2013-06-14
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
相关资源
最近更新 更多