2017-07-29 16 views
2

の無効なデフォルト値は、私はエラーを取得MySQLは:TIMESTAMP

ERROR 1067 (42000) at line 5459: Invalid default value for 'start_time' 

DROP TABLE IF EXISTS `slow_log`; 
CREATE TABLE IF NOT EXISTS `slow_log` (
    `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `user_host` mediumtext NOT NULL, 
    `query_time` time(6) NOT NULL, 
    `lock_time` time(6) NOT NULL, 
    `rows_sent` int(11) NOT NULL, 
    `rows_examined` int(11) NOT NULL, 
    `db` varchar(512) NOT NULL, 
    `last_insert_id` int(11) NOT NULL, 
    `insert_id` int(11) NOT NULL, 
    `server_id` int(10) unsigned NOT NULL, 
    `sql_text` mediumtext NOT NULL 
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'; 

私はによると

$ mysql --version 
mysql Ver 14.14 Distrib 5.7.18, for osx10.10 (x86_64) using EditLine wrapper 

のMySQL 5.7.18を使用しています次のクエリを実行していますMySQL 5.7 documentationの場合、次の構文は

です。
CREATE TABLE t1 (
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
); 

上記のSQL構文で何が問題になっていますか?

+0

わからない場合がありますが、DEFAULTとNOT NULLを必要とします:

CREATE TABLE t1 ( ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) ); 

これは許可されていませんか?また、(6)を削除してみてください。 –

+0

挿入時にフィールドが最初にnullであるため、current_timestampへの挿入後に変更されるため、NOT NULLが問題になることに同意します。 – Myonara

+0

どうすればint(* 10 *)のようなものになりますか?! – Strawberry

答えて

2

、これらの作業の両方:

`start_time` timestamp(6), 

そして:あなたは後者を使用することができます

`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 

- 定義のうち、精度指定子を残します。

しかし、右の方法は次のとおりです。

`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), 

としてはdocumentationで説明:

TIMESTAMPまたはDATETIME列の定義はどこにでも明示的 小数秒の精度の値が含まれている場合は、同じ値でなければなりません列の定義全体で を使用してください。これは許可されている:それは問題である

CREATE TABLE t1 (
    ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(3) 
); 
1

試してみてください。興味深いことに

mysql> DROP TABLE IF EXISTS `slow_log`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `slow_log` (
    -> `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) 
    ->          ON UPDATE CURRENT_TIMESTAMP(6), 
    -> `user_host` mediumtext NOT NULL, 
    -> `query_time` time(6) NOT NULL, 
    -> `lock_time` time(6) NOT NULL, 
    -> `rows_sent` int NOT NULL, 
    -> `rows_examined` int NOT NULL, 
    -> `db` varchar(512) NOT NULL, 
    -> `last_insert_id` int NOT NULL, 
    -> `insert_id` int NOT NULL, 
    -> `server_id` int unsigned NOT NULL, 
    -> `sql_text` mediumtext NOT NULL 
    ->) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'; 
Query OK, 0 rows affected (0.00 sec) 
関連する問題