星期四, 九月 23, 2010

mysql的timestamp字段


在5.0和5.1版本上都发现了这个warning,记录一下。

根据bug报告记录显示,"WIN XP Professional" with MySQL 6.0.8Alpha版本上,干脆是直接fail掉了。



Server version: 5.1.32-log MySQL Community Server (GPL)

Your MySQL connection id is 124144 to server version: 5.0.27-standard-log



mysql> CREATE TABLE test1 (updatetime timestamp(14) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE = InnoDB;


Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show warnings;

*************************** 1. row ***************************


Level: Warning


Code: 1287


Message: 'TIMESTAMP(14)' is deprecated; use 'TIMESTAMP' instead


1 row in set (0.00 sec)




同时,TIMESTAMP字段是个很神奇的东西,值得copy一下其使用规则。


TIMESTAMP值显示尺寸的格式如下表所示:


  :


  +---------------+----------------+


  | 列类型    | 显示格式    |


  | TIMESTAMP(14) | YYYYMMDDHHMMSS | 


  | TIMESTAMP(12) | YYMMDDHHMMSS  |


  | TIMESTAMP(10) | YYMMDDHHMM   |


  | TIMESTAMP(8) | YYYYMMDD    |


  | TIMESTAMP(6) | YYMMDD     |


  | TIMESTAMP(4) | YYMM      |


  | TIMESTAMP(2) | YY       |


  +---------------+----------------+


  "完整"TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸创造


  最常见的显示尺寸是6、8、12、和14。


  你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14。


  列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数。


  


  列如:


  定义字段长度   强制字段长度


  TIMESTAMP(0) -> TIMESTAMP(14)


  TIMESTAMP(15)-> TIMESTAMP(14)


  TIMESTAMP(1) -> TIMESTAMP(2)


  TIMESTAMP(5) -> TIMESTAMP(6)


  


  所有的TIMESTAMP列都有同样的存储大小,


  使用被指定的时期时间值的完整精度(14位)存储合法的值不考虑显示尺寸。


  不合法的日期,将会被强制为0存储


你可以非常灵便地确定什么时候初始化和更新TIMESTAMP和对哪些列进行初始化和更新:例子,下面这些语句是等效的:

CREATE TABLE t (ts TIMESTAMP);


CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);


CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

没有评论: