为什么在导入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;
错误消息,
#1067 - Invalid default value for 'created_on'
此值有什么问题 - 0000-00-00 00:00:00
答案 0 :(得分:11)
很快,wormhit
的回答是错误的。注意第3行:
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
TRADITIONAL
根据manual是一个扩展为
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 中,转到偏好设置 - >型号:MySQL 并从 SQL_MODE中删除TRADITIONAL
以在生成的脚本中使用。
另请注意,TIMESTAMP
是时区感知类型,而DATETIME
则不是。因此,根据计算机的时区设置, MySQL 的全局和会话设置结果集可能会有所不同。
答案 1 :(得分:1)
使用DATETIME而不是TIMESTAMP
答案 2 :(得分:0)
如果此处提到的其他方法不起作用,您可以尝试这样做:
修改mysql路径的my.ini
。
sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"