MySQL和PHP日期和时间备忘单

时间:2013-01-18 02:20:48

标签: php mysql

我对MySQL数据库中日期和时间的选择感到困惑。是否有一个备忘单给我基础知识并总结了选择?

我欢迎技术更正,但请记住,这并不是一个参考。这是一份摘要备忘单。

1 个答案:

答案 0 :(得分:2)

MYSQL DATE,DATETIME和TIMESTAMP备忘单

<强> DATE
支持范围从'1000-01-01'到'9999-12-31' 以YYY-MM-DD格式存储为字符串。

<强> DATETIME
支持范围从'1000-01-01 00:00:00'到'9999-12-31 23:59:59' 存储为YYYY-MM-DD HH:MM:SS格式的字符串。

表示日历上的日期和挂钟上的时间。创建或更新记录时它永远不会改变。它永远不会根据服务器的时区而改变。可以做1000年到9999年的日期。

<强>时间戳
支持范围从'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC
不能在1970年之前做日期,因此不能用于出生日期 以YYYY-MM-DD HH:MM:SS格式存储为字符串。

时间戳是一个独特的时间点。在MySQL中,它通常用于跟踪记录的更改,并且可以设置为在创建和/或更新记录时自动更新。

MySQL根据服务器的时区转换TIMESTAMP值。它将转换为UTC(协调世界时)进行存储,然后再返回服务器的时区进行检索。

UNIX TIMESTAMP
自1970年1月1日以来UTC调整后的秒数,存储为带符号的32位整数。

当发生闰秒时,因此UTC日期不完全是86400秒,Unix时间编号中会出现不连续性。

这些存储在MySQL的“整数”列中,在内部存储为32位。

MySQL日期功能
MySQL的日期和时间格式是字符串,而不是整数。

FROM_UNIXTIME(timestamp)将unix时间戳格式化为字符串
UNIX_TIMESTAMP(mysqldate)将MySQL字符串转换为unix时间戳

PHP日期功能
Php日期函数使用unix时间戳,即整数。

string date( string $ format, int $ timestamp)从unix时间戳返回一个MySQL字符串
int strtotime( string $ mysqldate)从MySQL字符串返回一个unix时间戳

以不相容的日期时间格式处理的方式:
PHP将unix时间戳转换为MySQL字符串:

     $mysqldate = date( 'Y-m-d H:i:s', $timestamp );

PHP将MySQL字符串转换为unix时间戳:

     $timestamp = strtotime( $mysqldate );

MySQL将unix时间戳转换为MySQL字符串:

    $query = "UPDATE table SET mysqldatetimefield = FROM_UNIXTIME($timestamp);

MySQL将MySQL字符串转换为unix时间戳:

    $query = "SELECT UNIX_TIMESTAMP(mysqldate) FROM table;

将unix时间戳存储在MySQL整数列中:

    mysql> CREATE TABLE table ( timestamp INTEGER, PRIMARY KEY (timestamp) );
    mysql> INSERT INTO table(timestamp) VALUES (1358402400)