MySQL5.6以前對timestamp的一些限制
最近在做一個專案,其中需要建立一張管理員的表,DDL語句如下:
CREATE TABLE `manager` ( `id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `name` varchar(10) NOT NULL COMMENT '姓名', `phone` varchar(11) NOT NULL COMMENT '手機號碼', `createdAt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updatedAt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `deletedAt` datetime, PRIMARY KEY (`id`), UNIQUE KEY phone (`phone`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理員'; 複製程式碼
這一切在我本地環境執行的時候都很正常,但當我在測試環境的資料庫執行此段SQL的時候,卻出現瞭如下錯誤:
[42000][1067] Invalid default value for 'createdAt' 複製程式碼
一開始我還以為是SQL寫錯了,所以慣性的檢查了一遍SQL,還是沒發現毛病,網上的很多回答都是關於SQL_MODEL,但我的SQ_MODEL
是空的,所以並不是這個問題。
最後定位到問題是版本的問題,因為我本地的MySQL版本是5.6,而測試環境的是5.5
,所以就出現這個問題,關於這個問題還有一點就是在5.5的版本中一個欄位是不能同時有兩個CURRENT_TIMESTAMP
的,而5.6之後就解除了一系列的限制。
Previously, at most one TIMESTAMP column per table could be automatically initialized or updated to the current date and time. This restriction has been lifted. Any TIMESTAMP column definition can have any combination of DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP clauses. In addition, these clauses now can be used with DATETIME column definitions. For more information, see Automatic Initialization and Updating for TIMESTAMP and DATETIME.官方解釋