MySQL·5.6之前對timestamp的一些限制

最近在作一個項目,其中須要創建一張管理員的表,DDL語句以下:html

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的時候,卻出現了以下錯誤:mysql

[42000][1067] Invalid default value for 'createdAt'
複製代碼

一開始我還覺得是SQL寫錯了,因此慣性的檢查了一遍SQL,仍是沒發現毛病,網上的不少回答都是關於SQL_MODEL,但個人SQ_MODEL是空的,因此並非這個問題。sql

最後定位到問題是版本的問題,由於我本地的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. 官方解釋測試

相關文章
相關標籤/搜索