推荐给好友 上一篇 | 下一篇

MySQL 关于毫秒的处理

很多从ORACLE 或者 SQL SERVER 移植到 MySQL 的朋友都遇到一个相同的问题,就是关于毫秒的存储与显示。 由于MySQL 的只提供了DATETIME, TIMESTAMP, TIME, DATE, YEAR这几种时间类型,而且DATETIME 以及 TIMESTAMP 的最小单位是秒,没有存储毫秒级别的函数。 不过MySQL 却能识别时间中的毫秒部分。而且我们有多种方式可以获得毫秒的部分,比如函数:microsecond 等。
9aIfd gw^q/E!xG)N9\BSD爱好者乐园M({%CH5E,k
我这里举一个简单的例子,来存储秒之前和之后的部分。
1c B7Q,u3p2}$@U$b对于把时间字段作为主键的应用,我们可以建立以下的表来作相应的转化:
.l1Q6DLes5zBSD爱好者乐园X+`kUT;UJ/PR U
mysql> create table mysql_microsecond ( log_time_prefix timestamp not null default 0, log_time_suffix mediumint not null default 0) engine innnodb;BSD爱好者乐园p3fGQ[B
Query OK, 0 rows affected, 2 warnings (0.00 sec)
~7VW V&P2?M
}9[b%A2dB%[8k.VGmysql> alter table mysql_microsecond add primary key (log_time_prefix, log_time_suffix);
'Y@8w'e,wQuery OK, 0 rows affected (0.01 sec)BSD爱好者乐园X/ehrG3S+^
Records: 0  Duplicates: 0  Warnings: 0BSD爱好者乐园&vrV&t0L.D
BSD爱好者乐园va\8| zu
mysql> set @a = convert(concat(now(),'.222009'),datetime);
6Z#n3C#F|/u-pCQuery OK, 0 rows affected (0.00 sec)
(K/w$}z0t#f o V7F;A\.j
q)|6Gq3@4n)c @mysql> insert into mysql_microsecond select date_format(@a,'%Y-%m-%d %H-%i-%s'),date_format(@a,'%f');BSD爱好者乐园.{1Cga.TkO s3U| O
Query OK, 1 row affected (0.00 sec)BSD爱好者乐园RDH8j1c
Records: 1  Duplicates: 0  Warnings: 0BSD爱好者乐园C fv,u'U-J
BSD爱好者乐园O[`i s%m
mysql> select * from mysql_microsecond;
*d_8mP1c#|-G+---------------------+-----------------+BSD爱好者乐园z"a\&`-U9Mu9^i
| log_time_prefix     | log_time_suffix |
9U/cS&\%`|J-t+---------------------+-----------------+BSD爱好者乐园;s8GM0R._)@]
| 2009-08-11 17:47:02 |          222009 |
#Hg:b*Q8X;V{L#A+k+---------------------+-----------------+
W7XTV+~G1 row in set (0.00 sec)
9g:X D I0I%Za.E
tBN8?pYBSD爱好者乐园B/uf`)o9[I
或者是用VARCHAR来存储所有的时间字段, 又或者是存储一个HASH来保证性能!
v2ly%TiU rsL~,z方法多多,就看你的应用怎么用合理了。
[重要提醒]对本篇资料有疑问,请到论坛讨论,尽量使文章准确无误>>>
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: mysql MYSQL MySQL Mysql MySql 毫秒
 

评分:0

我来说两句

seccode