MySQL存储毫秒数据的方法
有相当一部分刚接触到MySQL的朋友都遇到这样一个相同的问题,就是关于毫秒的存储与显示。由于MySQL数据类型中只提供了DATETIME,TIMESTAMP,TIME,DATE,YEAR这几种时间类型,而且DATETIME以及TIMESTAMP的最小单位是秒,没有存储毫秒级别的函数。不过MySQL却能识别时间中的毫秒部分。而且我们有多种方式可以获得毫秒的部分,比如函数: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:0
mysql>set@a=convert(concat(now(),'.222009'),datetime); QueryOK,0rowsaffected(0.00sec)
mysql>insertintomysql_microsecondselectdate_format(@a,'%Y-%m-%d%H-%i-%s'),date_format(@a,'%f'); QueryOK,1rowaffected(0.00sec) Records:1Duplicates:0Warnings:0
mysql>select*frommysql_microsecond; +---------------------+-----------------+ |log_time_prefix|log_time_suffix| +---------------------+-----------------+ |2009-08-1117:47:02|222009| +---------------------+-----------------+ 1rowinset(0.00sec)
或者是用VARCHAR来存储所有的时间字段,又或者是存储一个HASH来保证性能!
方法很多,就看你的应用怎么用合理了。