首页 > 解决方案 > MySQL 错误 #1067 'UpdatedAt' 的默认值无效

问题描述

我从备份中恢复了我的 MySQL 数据库,但我注意到编码字符设置为 latin1_swedish_ci,我无法将其更改为 utf8_unicode_ci,因为我在标题中遇到错误。有什么建议么?show create table player 的输出;在下方并选择版本();8.0.18

CREATE TABLE `players` (
 `Id` mediumint(9) NOT NULL AUTO_INCREMENT,
 `Login` varchar(50) NOT NULL DEFAULT '',
 `Game` varchar(3) NOT NULL DEFAULT '',
 `NickName` varchar(100) NOT NULL DEFAULT '',
 `Nation` varchar(3) NOT NULL DEFAULT '',
 `UpdatedAt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
 `Wins` mediumint(9) NOT NULL DEFAULT '0',
 `TimePlayed` int(10) unsigned NOT NULL DEFAULT '0',
 `TeamName` char(60) NOT NULL DEFAULT '',
 PRIMARY KEY (`Id`),
 UNIQUE KEY `Login` (`Login`),
 KEY `Game` (`Game`),
 KEY `Nation` (`Nation`),
 KEY `Wins` (`Wins`),
 KEY `UpdatedAt` (`UpdatedAt`)
) ENGINE=MyISAM AUTO_INCREMENT=1014 DEFAULT CHARSET=latin1

标签: mysql

解决方案


您的新服务器设置了 NO_ZERO_DATE sql 模式,它不允许使用该默认值。我个人认为这是一个错误,它不允许您对表格进行不相关的更改。

您可以使用以下方法删除当前会话的该设置:

set session sql_mode=replace(@@sql_mode,'NO_ZERO_DATE','');

但是您可能希望在配置文件中设置 sql_mode 以便它适用于所有会话并在重新启动后持续存在。您可能正在执行新的 sql_mode 默认值不允许的其他查询,因此您应该查看其他新的默认值;特别是,人们可能会遇到 ONLY_FULL_GROUP_BY 和 STRICT_TRANS_TABLES 的问题。


推荐阅读