我对MySQL数据库中日期和时间的选择感到困惑。是否有一个备忘单给我基础知识并总结了选择?
我欢迎技术更正,但请记住,这并不是一个参考。这是一份摘要备忘单。
答案 0 :(得分:2)
<强> 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)