在mysql中存储时间的字段类型有date,datetime,timestamp,time,year等,这些类型如何取舍?而现在我更趋向于使用bigint来记录UNIX时间
由于使用的是数字型字段,有以下几点优势:
1.更方便比较时间的早晚 只需要比较
$now = time();
$table = 'test';
$sql = "SELECT * FROM `$table` WHERE `pubdate` < $now";
2.更方便转换时间格式
使用date即可完成绝大多数格式的转换
比如转换成 年月日
$time = time();
echo date('Y-m-d',$time);
转换成RSS的RFC 822 格式的日期
$time = time();
echo date('r',$time);
普通时间格式转换到Unix 时间戳
strtotime -- 将任何英文文本的日期时间描述解析为 Unix 时间戳
$time = date('Y-m-d');
echo strtotime($time);
最大的优势我想在于时间比较方面,特别方便. ^_^
更多的优势你来总结。
附mysql日期字段参考:
DATE
一个日期。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列。
DATETIME
一个日期和时间组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式来显示DATETIME值,但是允许你使用字符串或数字把值赋给DATETIME的列。
TIMESTAMP[(M)]
一个时间戳记。范围是'1970-01-01 00:00:00'到2037年的某时。MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给TIMESTAMP列。一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个NULL值设置它为当前的日期和时间。见7.3.6 日期和时间类型。
TIME
一个时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式来显示TIME值,但是允许你使用字符串或数字把值赋给TIME列。
YEAR[(2|4)]
一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。MySQL以YYYY格式来显示YEAR值,但是允许你把使用字符串或数字值赋给YEAR列。(YEAR类型在MySQL3.22中是新类型。)