很多從ORACLE 或者 SQL SERVER 移植到 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來保證效能!
方法多多,就看你的應用怎麼用合理了。