MySQL存储毫秒数据的方法

相当一部分刚接触MySQL的朋友都遇到过同样的问题——毫秒的存储和显示。
由于MySQL在数据类型中只提供了DATETIME、TIMESTAMP、TIME、DATE、YEAR时间类型,而DATETIME和TIMESTAMP的最小单位是秒,所以没有存储毫秒的功能。
然而,MySQL可以识别以毫秒为单位的时间部分。
而我们有很多方法来获取毫秒部分,比如function:microsecond等。
这里举个简单的例子,方便记忆秒前和秒后的部分。
对于使用时间字段作为主键的应用,我们可以创建如下表进行相应的转换:mysql>createtablemysql_microsecond(log_time_prefixtimestampnotnulldefault0,log_time_suffixmediumintnotnulldefault0)engineinnnodb;QueryOK,0rowsaffected,2warnings(0.00sec)mysql>altertablemysql_microsecondaddprimarykey(log_time_prefix,log_time_suffix);QueryOK,0rowsaffected(0.01sec)Records:0Duplicates:0Warnings:0mysql>set@a=convert(concat(now(),'.222009'),datetime);QueryOK,0rowsaffected(0.00sec)我的sql>insertintomysql_microsecondselectdate_format(@a,'%Y-%m-%d%H-%i-%s'),date_format(@a,'%f');QueryOK,1rowaffected(0.00sec)记录:1重复:0警告:0mysql>select*frommysql_microsecond;+---------------------+---------------+|log_time_prefix|log_time_suffix|+--------------------+------------------+|2009-08-1117:47:02|222009|+--------------------+-------------------+1rowinset(0.00sec)使用VARCHAR存储所有时间字段或存储HASH以保证性能!方法有很多种,关键看如何在自己的应用中恰当地使用。

如何获得MySQL毫秒,微秒

经常有人问:MySQL中如何获取毫秒?于是我就写日记来总结。
在较新版本的MySQL(MySQL6.0.5)中,没有生成微秒的函数,now()只能精确到秒。
MySQL也不存储以毫秒和微秒为单位的日期和时间类型。
然而奇怪的是MySQL已经内置了微秒级提取功能。
例如:selectmicrosecond('12:00:00.123456');--123456selectmicrosecond('1997-12-3123:59:59.000010');--10selectextract(microsecondfrom'12:00:00.123456');--123456selectextract(microsecondfrom'1997-12-3123:59:59.000010');--10selectdate_format('1997-12-3123:59:59.000010','%f');--000010但是,想要在MySQL中获取毫秒,还是需要在应用层程序中寻找微秒。
如果应用中检索到包含微秒的时间:1997-12-3123:59:59.000010,存储到MySQL中时,可以设计两个字段:c1datetime和c2mediumint,分别存储日期和微秒。
为什么不使用char来存储呢?使用char类型需要26个字节,而datetime+mediumint只有11(8+3)个字节。
名词解释毫秒、微秒:毫秒:毫秒-千分之一秒微秒:微秒-百万分之一秒1秒=1000毫秒;