Mysql 如何将字段的默认值设置为';0000-00-00:00:00';?

Mysql 如何将字段的默认值设置为';0000-00-00:00:00';?,mysql,sql,date,datetime,Mysql,Sql,Date,Datetime,如何将字段的默认值设置为“0000-00-00:00:00”?如果我们不能使用“0000-00-00:00:00”作为默认值?什么是基本有效的tiemdate 例如,这是用于创建我的文章表的SQL -- ----------------------------------------------------- -- Table `article` -- ----------------------------------------------------- DROP TABLE IF EXIS

如何将字段的默认值设置为“0000-00-00:00:00”?如果我们不能使用“0000-00-00:00:00”作为默认值?什么是基本有效的tiemdate

例如,这是用于创建我的文章表的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' 

SQL Server中的日期只能在1753年1月1日和9999年12月31日之间

您必须决定如何作为一个组织或组处理默认或缺少的日期时间(NULL,或这些极端之一)。通常,我们的组织选择不带日期,而不是1753或9999日期。当没有日期时,NULL比任何日期都更合适,就像1750或9999年代的事情看起来一样可笑。将缺少的日期保留为空也可以避免报告拉假日期


错误原因:SQL模式

如果sql模式允许,您可以将
日期
日期时间
时间戳
字段的默认值设置为特殊的“零”值“0000-00-00”作为伪日期。对于低于5.7.4的MySQL版本,这是由NO_ZERO_DATE模式决定的,请参阅以下摘录:

MySQL允许您将'0000-00-00'的“零”值存储为 “虚拟日期”。在某些情况下,这比使用NULL更方便 值,并使用更少的数据和索引空间。不允许“0000-00-00”, 启用无零日期SQL模式

此外,必须启用严格模式以禁止“零”值:

如果启用此模式和严格模式,则不允许使用“0000-00-00”
和插入会产生错误,除非同时给出IGNORE

到目前为止,这仅取决于严格模式:

严格模式影响服务器是否允许“0000-00-00”作为 有效日期:

如果未启用严格模式,则允许“0000-00-00”并插入 不发出警告

如果启用严格模式,则不允许使用“0000-00-00”并插入 产生一个错误,除非同时给出IGNORE。对于插入忽略 和UPDATE IGNORE,允许使用“0000-00-00”,并且插入生成 警告

检查版本和SQL模式

因此,您应该检查您的MySQL版本和MySQL服务器的

SELECT version();
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
启用插入功能

您可以使用
set sql\u mode=''

日期时间的有效范围

DATETIME
支持的范围为

[1000-01-01 00:00:00] to ['9999-12-31 23:59:59'], 
因此,最小有效日期时间值为“1000-01-01 00:00:00”。
但我不建议使用此值

附加说明

由于MySQL 5.6.5所有
TIMESTAMP
DATETIME
列都可以具有神奇的行为(初始化和/或更新),因此不仅
TIMESTAMP
而且最多只能有一列,请参见:

从MySQL 5.6.5开始,时间戳和日期时间列可以自动 初始化并更新到当前日期和时间(即 当前时间戳)。在5.6.5之前,这仅适用于时间戳,并且 每个表最多有一个时间戳列。以下是第一个注释 描述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.';
有一个解决办法。 我不确定这个的安全性,所以我建议

SELECT @@SESSION.sql_mode session
首先。将值保存在剪贴板中,然后

SET SESSION sql_mode = '';

之后,您可以使用“0000-00-00 00:00:00”之类的默认值创建或更改表格。

您也可以这样替换模式,它可以正常工作

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'NO_AUTO_CREATE_USER',''));
从以下位置替换代码:

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.'; 创建表(如果不存在)`article`( `article_id`INT(10)无符号非空自动增量, `url`VARCHAR(255)不为空, `title`VARCHAR(255)不为空, `date_from'DATETIME NOT NULL DEFAULT'0000-00-00 00:00:00'注释'将文章设置为新的或来自DATETIME的特征', `date_至“DATETIME非空默认值”0000-00-00 00:00:00“注释”将文章设置为新的或特色的日期时间, `“DATETIME NOT NULL DEFAULT”0000-00-00 00:00:00“注释”用户修改或输入的手动日期时间上的回溯时间, `已在“DATETIME NOT NULL默认当前时间戳注释”上创建项目时的永久日期时间, `更新了“TIMESTAMP NOT NULL DEFAULT CURRENT\u TIMESTAMP on UPDATE CURRENT\u TIMESTAMP COMMENT”上的\u文章更新的日期时间, 主键(`article\u id`、`parent\u id`、`template\u id`), 唯一索引'url\u UNIQUE'('url'ASC)) 引擎=MyISAM 自动增量=66 COMMENT='包含具有一对一属性的项目的实体'; 到

创建表(如果不存在)`article`( `article_id`INT(10)无符号非空自动增量, `url`VARCHAR(255)不为空, `title`VARCHAR(255)不为空, `date_from'DATETIME NOT NULL DEFAULT'1000-01-01 00:00:00'COMMENT'将文章设置为新的或以DATETIME为特征。', `date_至'DATETIME NOT NULL DEFAULT'1000-01-01 00:00:00'注释'将文章设置为新的或特色的日期时间', `“DATETIME NOT NULL DEFAULT”1000-01-01 00:00:00“注释”用户修改或输入的手动日期时间上的回溯时间, `已在“DATETIME NOT NULL默认当前时间戳注释”上创建项目时的永久日期时间, `更新了“TIMESTAMP NOT NULL DEFAULT CURRENT\u TIMESTAMP on UPDATE CURRENT\u TIMESTAMP COMMENT”上的\u文章更新的日期时间, 主键(`article\u id`、`parent\u id`、`template\u id`), 唯一索引'url\u UNIQUE'('url'ASC)) 引擎=MyISAM
这对我很有用,对PHP7和mysql 5.7也很有帮助,因为mysql版本后默认的有效日期时间值 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.'; 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 '1000-01-01 00:00:00' COMMENT 'Set the article as new or featured from a datetime.', `date_to` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT 'Set the article as new or featured to a datetime.', `backdated_on` DATETIME NOT NULL DEFAULT '1000-01-01 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