我正在尝试运行脚本来修改数据库,这个查询
ALTER TABLE cmContentVersion CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
给出这个错误
ERROR 1067 (42000) at line 68: Invalid default value for 'modifiedDateTime'
Warning (Code 1264): Out of range value for column 'modifiedDateTime' at row 1
Error (Code 1067): Invalid default value for 'modifiedDateTime'
该列modifiedDateTime
定义为
`modifiedDateTime` datetime NOT NULL default '0000-00-00 00:00:00',
问题:在使用 utf8_general_ci 时,是否存在可以替换的有效“无效”默认值。0000-00-00 00:00:00
还是我必须告诉开发人员不要再依赖他们代码中的“无效日期”?
这看起来更像是一个 SQL 模式问题,而不是字符集。如果在打开严格模式之前使用全零默认日期创建表,则严格模式(更具体地说是 NO_ZERO_DATE,它是严格模式的一部分)通常会引发该错误。
我们使用的(对于类似的修改日期列)是“1970-01-01 00:00:01”。
在稍微相关的注释中,我们对这些列使用时间戳(以及创建时间)。占用一半的存储空间,访问速度更快。