Mysql日期错误创建表

时间:2018-03-22 18:32:24

标签: mysql

当我尝试创建一个无法修复的sql表时出现错误:

CREATE TABLE IF NOT EXISTS `#__websitemanager_magazine` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`date` DATE NOT NULL DEFAULT '',
`magazine_file` TEXT NOT NULL,
PRIMARY KEY  (`id`),

)ENGINE = MyISAM AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8;

它会为'date'抛出一个无效的默认值。我正在使用mysql 5.7

4 个答案:

答案 0 :(得分:0)

不要将空字符串作为日期的默认值。尝试类似:

`date` DATE NOT NULL DEFAULT CURRENT_TIMESTAMP

答案 1 :(得分:0)

您的字段字符串周围不需要引号。在日期行的末尾还有一个空字符串,这是您不需要的,这可能会引发错误。

答案 2 :(得分:0)

您可以更新查询

CREATE TABLE IF NOT EXISTS `#__websitemanager_magazine` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
    `date` DATE NOT NULL DEFAULT CURRENT_TIMESTAMP,
     `magazine_file` TEXT NOT NULL,
     PRIMARY KEY  (`id`),
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

每次当你输入任何日期值时,要么将其设为NULL并将其设置为默认值NULL,或者如果您不想创建可空值,请将其设为NOT NULL DEFAULT CURRENT_TIMESTAMP。

答案 3 :(得分:0)

由于使用空字符串作为date数据类型的默认值,您收到错误。解决方案中的其他答案是关闭的,因为MySQL中的NOW数据类型不支持使用CURRENT_TIMESTAMPdate等函数。这些函数不提供常量值。

Create Table Documentation

  

默认值必须是常量;它不能是一个功能或表达。这意味着,例如,您不能将日期列的默认值设置为函数的值,例如NOW()或CURRENT_DATE。例外情况是您可以将CURRENT_TIMESTAMP指定为TIMESTAMP或DATETIME列的默认值

date声明为NOT NULL时,MySQL允许使用零值0000-00-00代替空值。要修复SQL语句,您需要更改DEFAULT '0000-00-00'

  

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

您也可以将DEFAULT作为一个整体保留,因为Data Type Defaults文档状态0000-00-00是日期的隐式默认值

  

对于TIMESTAMP以外的日期和时间类型,默认值为类型的适当“零”值