在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);