MySQL错误#1067 'UpdatedAt'的默认值无效。

25 浏览
0 Comments

MySQL错误#1067 'UpdatedAt'的默认值无效。

我从备份中恢复了MySQL数据库,但是我注意到编码字符被设置为latin1_swedish_ci,我无法将其更改为utf8_unicode_ci,因为我在标题中遇到了错误。有什么建议吗?下面是show create table players;的输出和select version();的结果: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

0
0 Comments

原因:在新服务器上,设置了NO_ZERO_DATE sql模式,该模式不允许使用该默认值。

解决方法:可以在当前会话中移除该设置,使用以下代码:

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

但是你可能希望在配置文件中设置sql_mode,以便将其应用于所有会话并在重启后保持。你可能会执行其他查询,而新的sql_mode默认值可能不允许这些查询,因此你应该检查其他新的默认值;特别是,可能会出现ONLY_FULL_GROUP_BY和STRICT_TRANS_TABLES的问题。

我使用了set session sql_mode=replace(@_mode,'NO_ZERO_DATE','');命令,并尝试将字符集更改为urf8,但仍然出现相同的错误。

在同一个会话中吗?

那么你肯定做错了什么;请参考dbfiddle.uk/…

0
0 Comments

MySQL错误#1067无效的默认值'UpdatedAt'的原因可能是MySQL的日期限制。解决方法是通过以下步骤进行操作:

1. 查看当前变量值:show variables like 'sql_mode';

2. 确认之前命令的结果:

+---------------+-----------------------------------------------------+

| Variable_name | Value |

+---------------+-----------------------------------------------------+

| sql_mode | NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION |

+---------------+-----------------------------------------------------+

3. 临时删除日期限制:set sql_mode='NO_ENGINE_SUBSTITUTION';

4. 执行所有需要的命令,如INSERT/UPDATE/CREATE等。

5. 完成后将sql_mode恢复为之前的值:set sql_mode='NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION';

通过以上步骤,可以解决MySQL错误#1067无效的默认值'UpdatedAt'问题。

0