sql >> Databáze >  >> RDS >> Mysql

Jak mohu nastavit výchozí hodnotu pole jako „0000-00-00 00:00:00“?

Příčina chyby:režim SQL

Můžete nastavit výchozí hodnotu DATE , DATETIME nebo TIMESTAMP pole na speciální "nulovou" hodnotu '0000-00-00' jako fiktivní datum, pokud to režim sql umožňuje. U verzí MySQL nižších než 5.7.4 se toto řídí režimem NO_ZERO_DATE, viz tento výňatek z dokumentaci :

Navíc musí být povolen přísný režim pro zakázání "nulových" hodnot:

Od MySQL 5.7.4 to závisí pouze na přísném režimu:

Zkontrolujte verzi a režim SQL

Měli byste tedy zkontrolovat verzi MySQL a režim SQL vašeho serveru MySQL s

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

Povolte INSERT

Sql_mode pro vaši relaci můžete nastavit pomocí SET sql_mode = '<desired mode>'

SET sql_mode = 'STRICT_TRANS_TABLES';   

Platný rozsah pro DATETIME

Podporovaný rozsah pro DATETIME je

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

takže minimální platná hodnota DATETIME je '1000-01-01 00:00:00'.
Tuto hodnotu bych ale nedoporučoval používat.

Další poznámka

Od MySQL 5.6.5 všechny TIMESTAMP a DATETIME sloupce mohou mít magické chování (inicializace a/nebo aktualizace), nejen TIMESTAMP a maximálně jeden sloupec, viz Automatická inicializace a aktualizace pro TIMESTAMP a DATETIME :

Příkaz CREATE TABLE v případě MySQL 5.6.5 nebo novější můžete změnit na:

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.';


  1. Existuje způsob, jak poskytnout uživatelsky přívětivé chybové hlášení o porušení omezení

  2. jak vložit aktuální datum do pole DATE ve formátu dd/mm/rrrr v oracle

  3. zapisovat výsledky dotazu sql do souboru v mysql

  4. Jak zkontrolovat, zda MySQL vrací hodnotu null/empty?