当我尝试创建一个无法修复的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
答案 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_TIMESTAMP
或date
等函数。这些函数不提供常量值。
默认值必须是常量;它不能是一个功能或表达。这意味着,例如,您不能将日期列的默认值设置为函数的值,例如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以外的日期和时间类型,默认值为类型的适当“零”值