MySQL存储毫秒数据的方法

有相当一部分刚接触到 MySQL 的朋友都遇到这样一个相同的问题,就是关于毫秒的存储与显示。由于MySQL数据类型中只提供了DATETIME, TIMESTAMP, TIME, DATE, YEAR这几种时间类型,而且DATETIME 以及 TIMESTAMP 的最小单位是秒,没有存储毫秒级别的函数。 不过MySQL却能识别时间中的毫秒部分。而且我们有多种方式可以获得毫秒的部分,比如函数:microsecond 等。

我这里举一个简单的例子,来存储秒之前和之后的部分。
对于把时间字段作为主键的应用,我们可以建立以下的表来作相应的转化:

mysql> create table mysql_microsecond ( log_time_prefix timestamp not null default 0, log_time_suffix mediumint not null default 0) engine innnodb;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> alter table mysql_microsecond add primary key (log_time_prefix, log_time_suffix);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> set @a = convert(concat(now(),'.222009'),datetime);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into mysql_microsecond select date_format(@a,'%Y-%m-%d %H-%i-%s'),date_format(@a,'%f');
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from mysql_microsecond;
+---------------------+-----------------+
| log_time_prefix   | log_time_suffix |
+---------------------+-----------------+
| 2009-08-11 17:47:02 |     222009 |
+---------------------+-----------------+
1 row in set (0.00 sec)

或者是用VARCHAR来存储所有的时间字段, 又或者是存储一个HASH来保证性能!
方法很多,就看你的应用怎么用合理了。

(0)

相关推荐

  • Delphi控件ListView的属性及使用方法详解

    Delphi的ListView组件位于组件板的Win32页,可使用4种图形方式(大图标.小图标.列表.详细列表)来描述选项内容,类似于Windows操作系统中的"我的电脑",数据项图形保存在ImageList组件中. 1.ListView主要属性 (1)ViewStyle属性 ViewStyle属性用于选择数据项的4种显示方式,因此该属性有4个选项值:vsIcon大图标.vsSmallIcon小图标.vsList列表.vsReport详细列表. (2)Items属性 Items属性用于

  • Delphi实现毫秒级别的倒计时实例代码

    本文以实例简述了Delphi实现毫秒级别倒计时的方法.一般来说可以获得系统的高性能频率计数器在一毫秒内的震动次数,如果时钟震动次数超过10毫秒的次数则刷新edit3的显示,显示从开始记数到记数实际经过的时间,具体实现代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, mmsystem; type

  • php+js实现倒计时功能

    js部分 复制代码 代码如下: setInterval("time_controller()",1000);function time_controller(){    $(".time_val").each(function(){         var time_id = "time_show_"+$(this).attr('for');         var time_val= $(this).attr('value');        

  • python实现倒计时的示例

    复制代码 代码如下: import timecount = 0 a = input('time:') b = a * 60 while (count < b): ncount = b - count  print ncount  time.sleep(1) count += 1 print 'done'

  • Delphi用TActionList实现下载文件的方法

    Delphi中的TActionList有个标准动作TDownLoadURL,内部是使用的URLDownloadToFile,它下载文件时会定时产生OnDownloadProgress 事件,这样就可以用进度条显示. 本文讲述了Delphi用TActionList实现下载文件的方法,实现代码如下所示: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtActns,

  • Delphi实现判断网址是否存在及是否可以打开的方法

    本例所述Delphi程序用于检测网址是否为404,也就是检测网址是否存在,或是否可以打开,针对不同的检查方法,会返回不同的结果. 程序主要代码如下: unit address; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Psock, NMHttp, StdCtrls, ComCtrls; type TForm1 = class(TForm) Label1: TL

  • Delphi 生成excel中饼图的实例代码

    复制代码 代码如下: var  i,j,m,n,count1:integer;  str:string;  Jdate:tdatetime;  channellist,potBstrtime,potEstrtime,Jchannelname:string;  Rres:boolean;  JSHR:double;  Excelid,achart1,cell1,cell2,cell3,cell4,cellMiddle,Range1,Range2,series1:variant;  ExRowsVa

  • delphi发送消息控制滚动条使用示例

    1.Perform 函数 复制代码 代码如下: DBGrid1.Perform(WM_VSCROLL,SB_PAGEDOWN,0); //控制滚动条,向后翻页 DBGrid1.Perform(WM_VSCROLL,SB_PAGEUP,0); //控制滚动条,向前翻页 2.SendMessage 函数 复制代码 代码如下: SendMessage(DBGrid1.Handle,WM_VSCROLL,SB_PAGEDOWN,0); SendMessage(DBGrid1.Handle,WM_VSCR

  • php获取当前时间的毫秒数的方法

    php本身没有提供返回毫秒数的函数,但提供了一个microtime()函数,该函数返回一个array,包含两个元素,一个是秒数,一个是小数表示的毫秒数,借助此函数,可以很容易定义一个返回毫秒数的函数,例如: 复制代码 代码如下: function getMillisecond() { list($s1, $s2) = explode(' ', microtime()); return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) *

  • jQuery实现倒计时跳转的例子

    实现代码: 复制代码 代码如下: <html>   <head>   <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />    <title>跳转页面</title>      <script src="jquery.js"></script>    <script la

随机推荐