MySQL workbench to PHPMyAdmin:0000-00-00 00:00:00 - 默认值无效

lau*_*kok 1 mysql sql phpmyadmin mysql-workbench

为什么在导入SQL创建MySQL工作台时会收到错误消息?

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';





-- -----------------------------------------------------

-- Table `$type`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `type` (

  `type_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,

  `name` VARCHAR(255) NULL DEFAULT NULL ,

  `created_on` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ,

  `updated_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,

  PRIMARY KEY (`type_id`) )

ENGINE = MyISAM

AUTO_INCREMENT = 1

DEFAULT CHARACTER SET = utf8;



SET SQL_MODE=@OLD_SQL_MODE;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Run Code Online (Sandbox Code Playgroud)

错误信息,

#1067 - Invalid default value for 'created_on' 
Run Code Online (Sandbox Code Playgroud)

这个值出了什么问题 - 0000-00-00 00:00:00

saa*_*aaj 11

不久,答案wormhit是错误的.注意第3行:

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

TRADITIONAL根据手册是一个扩展到的快捷方式

STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER

因此,通过指定模式,您实际上禁止零日期.在MySQL Workbench 6中,转到Preferences - > Model:MySQL并TRADITIONAL从SQL_MODE中删除以在生成的脚本中使用.

另请注意,这TIMESTAMP是时区感知类型,而DATETIME不是.因此,根据机器的时区设置,MySQL的全局和会话设置结果集可能会有所不同.