PHP

mysql中存储毫秒级时间戳的字段用什么类型比较好?

mysql中存储毫秒级时间戳的字段用什么类型比较好?
秒级的时间戳用int(11)查询很快,这个int(11)就不太适用于毫秒级时间戳了
已邀请:

sisian - 凋谢是真实的,盛开只是一种过去。

赞同来自: 大王 西贤

建议把整个时间戳分两字段个来存储,分别存储日期和毫秒
 
存储日期字段使用(int)类型  
一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。一位大小为 4 个字节。
存储毫秒字段使用(mediumint或smallint)类型,具体看你毫秒保留多少位
mediumint
一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215。 一位大小为3个字节。
smallint
一个小整数。有符号的范围是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据,无符号的范围是0到65535。一位大小为 2 个字节。
如果保留毫秒三位,得到的就是一个十三位整数,而int类型最长才十位,除非你用bigint类型,但是bigint一位占8个字节太不划算了。
1511507346758 
10位的时间戳+3位的毫秒
bigint
-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到18446744073709551615。一位为 8 个字节。
/*
* 返回毫秒级时间戳
* 10位的时间戳+3位的毫秒
* */
function msectime() {
list($msec, $sec) = explode(' ', microtime());
$msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
return $msectime;
}

要回复问题请先登录注册