問題背景:mysql
線上的linux服務器上的mysql服務器中導出數據庫的結構。想要在本地建立一個測試版本linux
導出後再本地mysql上運行卻報錯 1067 - Invalid default value for sql
mysql數據庫中須要使用timestamp列來存儲數據的建立時間和更新時間數據庫
例如,建立後臺管理菜單表,只看created_at和updated_at兩個字段服務器
DROP TABLE IF EXISTS `admin_menu`; CREATE TABLE `admin_menu` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `parent_id` int(11) NOT NULL DEFAULT 0, `order` int(11) NOT NULL DEFAULT 0, `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `uri` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `permission` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` timestamp(0) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Compact;
執行後發現報錯測試
1067 - Invalid default value for 'updated_at'。updated_at字段的默認值無效。而created_ad字段類型是datetime日期時間類型默認值爲NULL沒有發生報錯spa
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
`updated_at` timestamp(0) DEFAULT '1970-01-01 08:00:00',
方法3unix
網上查找,在mysql配置文件中增長配置參數code
[mysqld]節點下添加blog
重啓mysql數據庫試配置生效。
以後就能夠正常執行上面的數據的
下面是方法三的具體解釋,僅做記錄,能夠不須要知道
mysql5.6.6以前,timestamp時間類型有一個默認行爲: TIMESTAMP列若是沒有明確聲明NULL屬性,默認爲NOT NULL。(而其餘數據類型,若是沒有顯示聲明爲NOT NULL,則容許NULL值。) insert插入一條數據,TIMESTAMP的列值爲NULL,會自動存儲時候,會將當前timestamp存儲到這個timestamp列中。