フィールドのデフォルト値を「0000-00-00 00:00:00」に設定するにはどうすればよいですか? 質問する

フィールドのデフォルト値を「0000-00-00 00:00:00」に設定するにはどうすればよいですか? 質問する

フィールドのデフォルト値を「0000-00-00 00:00:00」に設定するにはどうすればいいですか?「0000-00-00 00:00:00」をデフォルトとして使用できない場合はどうすればよいですか?基本的な有効な日付ですか?

たとえば、これは記事テーブルを作成するためのSQLです。

-- -----------------------------------------------------
-- Table `article`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `article` ;

CREATE TABLE IF NOT EXISTS `article` (
  `article_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `url` VARCHAR(255) NOT NULL,
  `title` VARCHAR(255) NOT NULL,
  `date_from` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured from a datetime.',
  `date_to` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured to a datetime.',
  `backdated_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'The manual datetime that is modified or input by the user.',
  `created_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'The permanent datetime when the article is created.',
  `updated_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'The datetime when the article is updated on.',
  PRIMARY KEY (`article_id`, `parent_id`, `template_id`),
  UNIQUE INDEX `url_UNIQUE` (`url` ASC))
ENGINE = MyISAM
AUTO_INCREMENT = 66
COMMENT = 'Entity that holds the article with one-to-one properties.';

このクエリを実行するとこのエラーが発生します。

#1067 - Invalid default value for 'date_from' 

ベストアンサー1

エラーの原因: SQLモード

DATESQLモードで許可されている場合、DATETIMEまたはフィールドのデフォルト値を、TIMESTAMPダミーの日付として特別な「ゼロ」値「0000-00-00」に設定できます。MySQLバージョン5.7.4より前のバージョンでは、これはNO_ZERO_DATEモードによって制御されます。ドキュメンテーション:

MySQL では、「ダミーの日付」として「ゼロ」値 '0000-00-00' を保存できます。これは、NULL 値を使用するよりも便利な場合があり、使用するデータとインデックスのスペースが少なくなります。'0000-00-00' を許可しないようにするには、NO_ZERO_DATE SQL モードを有効にします。

さらに、「ゼロ」値を許可しないように厳密モードを有効にする必要があります。

このモードと厳密モードが有効になっている場合、IGNORE も指定されていない限り、「0000-00-00」は許可されず
、挿入によってエラーが発生します。

現在MySQL 5.7.4これは厳密モードにのみ依存します:

厳密モードは、サーバーが「0000-00-00」を有効な日付として許可するかどうかに影響します。

厳密モードが有効になっていない場合、「0000-00-00」が許可され、挿入によって警告は生成されません。

厳密モードが有効になっている場合、IGNORE も指定されていない限り、「0000-00-00」は許可されず、挿入するとエラーが発生します。INSERT IGNORE および UPDATE IGNORE の場合、「0000-00-00」は許可され、挿入すると警告が発生します。

バージョンとSQLモードを確認する

そのため、MySQLのバージョンとSQL モードMySQLサーバーの

SELECT version();
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

INSERTを有効にする

セッションのsql_modeを設定するには、SET sql_mode = '<desired mode>'

SET sql_mode = 'STRICT_TRANS_TABLES';   

DATETIME の有効範囲

サポートされている範囲DATETIME

[1000-01-01 00:00:00] to ['9999-12-31 23:59:59'], 

したがって、有効な最小の DATETIME 値は '1000-01-01 00:00:00' です。
ただし、この値を使用することはお勧めしません。

追加メモ

MySQL 5.6.5以降では、すべての列TIMESTAMPDATETIME列にマジック動作(初期化および/または更新)を実行できます。TIMESTAMP最大で1つの列のみ実行できます。TIMESTAMP と DATETIME の自動初期化と更新:

MySQL 5.6.5 以降では、TIMESTAMP 列と DATETIME 列は自動的に初期化され、現在の日付と時刻 (つまり、現在のタイムスタンプ) に更新されます。5.6.5 より前では、これは TIMESTAMP にのみ当てはまり、テーブルごとに最大 1 つの TIMESTAMP 列にのみ当てはまります。次の注記では、最初に MySQL 5.6.5 以降の自動初期化と更新について説明し、次に 5.6.5 より前のバージョンの違いについて説明します。

MySQL 5.6.5 以降の場合は、CREATE TABLE ステートメントを次のように変更できます。

CREATE TABLE IF NOT EXISTS `article` (
  `article_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `url` VARCHAR(255) NOT NULL,
  `title` VARCHAR(255) NOT NULL,
  `date_from` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured from a datetime.',
  `date_to` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured to a datetime.',
  `backdated_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'The manual datetime that is modified or input by the user.',
  `created_on` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The permanent datetime when the article is created.',
  `updated_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'The datetime when the article is updated on.',
  PRIMARY KEY (`article_id`, `parent_id`, `template_id`),
  UNIQUE INDEX `url_UNIQUE` (`url` ASC))
ENGINE = MyISAM
AUTO_INCREMENT = 66
COMMENT = 'Entity that holds the article with one-to-one properties.';

おすすめ記事