在 PHP-MySQL 中处理的日期时间/时间戳
Datetime / Timestamp to be handled in PHP-MySQL
我想知道 datetime
和 timestamp
之间哪一个是最好的选择,以便在 php-mysql 中处理。
我需要做的事情基本上是:双向按日期排序,select 特定年份的所有行。有可能吗?
我可以 select php-mysql 中具有特定年份或月份的所有行吗?例如 SELECT * FROM my_table WHERE my_date.year = 2014
?
这里有一个 OOP 方法来做你想做的事情,参考如下。
namespace Connection;
class Database
{
protected $Con;
public function __construct()
{
$this->Con = new PDO("MySQL:host=X;dbname=X", "user", "pass");
}
public function GetInstance()
{
return $this->Con;
}
}
// end class
$sql = "SELECT * FROM Table WHERE DATE_FORMAT(Column, %Y) = 2014";
use Connection;
$smpt = ((new Database)->GetInstance()
->Prepare($sql))
->execute();
foreach ($smpt->fetchAll() as $row):
echo $row['Column'];
endforeach;
Look at this Whosebug answer for the difference between DateTime and TimeStamp.
参考文献:
为获得最佳数据库性能,请在裸列 上使用条件。不要将它们包装在函数中。例如,假设 dtcol 是数据类型 DATE、DATETIME 或 TIMESTAMP...
SELECT t.dtcol
FROM mytable t
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2015-01-01'
也可以表示为:
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2014-01-01' + INTERVAL 1 YEAR
如果有以dtcol
为前导列的索引,MySQL可以使用索引范围扫描操作。
不要这样做:
WHERE YEAR(t.dtcol) = 2014
这将强制 MySQL 对 table 中的每个 行的 计算函数,并将函数的结果与文字进行比较。
在小型测试 table 上您不会注意到任何性能差异。但是您会在繁忙的系统中的大型 table 上注意到它(以一种缓慢而痛苦的方式)。
DATETIME 和 TIMESTAMP 之间存在一些显着差异。
DATETIME 支持更大范围的值。
目前,TIMESTAMP 实现为 Unix 风格的 32 位 "seconds since the beginning of the epoch",其值范围从“1970-01-01 00:00:01”到“2038-”的某个时间01-19'.
我想知道 datetime
和 timestamp
之间哪一个是最好的选择,以便在 php-mysql 中处理。
我需要做的事情基本上是:双向按日期排序,select 特定年份的所有行。有可能吗?
我可以 select php-mysql 中具有特定年份或月份的所有行吗?例如 SELECT * FROM my_table WHERE my_date.year = 2014
?
这里有一个 OOP 方法来做你想做的事情,参考如下。
namespace Connection;
class Database
{
protected $Con;
public function __construct()
{
$this->Con = new PDO("MySQL:host=X;dbname=X", "user", "pass");
}
public function GetInstance()
{
return $this->Con;
}
}
// end class
$sql = "SELECT * FROM Table WHERE DATE_FORMAT(Column, %Y) = 2014";
use Connection;
$smpt = ((new Database)->GetInstance()
->Prepare($sql))
->execute();
foreach ($smpt->fetchAll() as $row):
echo $row['Column'];
endforeach;
Look at this Whosebug answer for the difference between DateTime and TimeStamp.
参考文献:
为获得最佳数据库性能,请在裸列 上使用条件。不要将它们包装在函数中。例如,假设 dtcol 是数据类型 DATE、DATETIME 或 TIMESTAMP...
SELECT t.dtcol
FROM mytable t
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2015-01-01'
也可以表示为:
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2014-01-01' + INTERVAL 1 YEAR
如果有以dtcol
为前导列的索引,MySQL可以使用索引范围扫描操作。
不要这样做:
WHERE YEAR(t.dtcol) = 2014
这将强制 MySQL 对 table 中的每个 行的 计算函数,并将函数的结果与文字进行比较。
在小型测试 table 上您不会注意到任何性能差异。但是您会在繁忙的系统中的大型 table 上注意到它(以一种缓慢而痛苦的方式)。
DATETIME 和 TIMESTAMP 之间存在一些显着差异。
DATETIME 支持更大范围的值。
目前,TIMESTAMP 实现为 Unix 风格的 32 位 "seconds since the beginning of the epoch",其值范围从“1970-01-01 00:00:01”到“2038-”的某个时间01-19'.