开发者社区> 问答> 正文

PolarDB MySQL创建表包含多个timestamp报错Invalid default ...

已解决

PolarDB MySQL创建表包含多个timestamp报错Invalid default value for

展开
收起
提个问题 2024-06-14 10:12:13 68 0
1 条回答
写回答
取消 提交回答
  • 开发者社区问答官方账号
    官方回答
    采纳回答
    从MySQL 8.0开始,MySQL官方将explicit_defaults_for_timestamp的默认值从OFF修改成ON。目前PolarDB MySQL版 8.0中该参数的默认值仍然遵循5.6和5.7版本为OFF。如果迁移过程中不希望自动添加NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,则需要将该参数设置成ON。
    1. 当explicit_defaults_for_timestamp为OFF,MySQL对于TIMESTAMP类型使用了非标准行为:
    • TIMESTAMP类型的列,如果没有显性定义NULL属性,将会自动添加NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。如果显性定义NULL属性,则保留该属性。
    • 表中第一个定义TIMESTAMP的列,要么显性指定NULL,要么显性指定DEFAULT或者ON UPDATE属性,或者自动增加DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性。
    • 表中第二个定义TIMESTAMP的列,如果sql_mode没有设置成NO_ZERO_DATE,且没有显性指定NULL或者DEFAULT属性,会自动定义成DEFAULT '0000-00-00 00:00:00'。
        如果设置成严格模式的NO_ZERO_DATE,则会报错:ERROR 1067 (42000): Invalid default value for 'xxx'
    2. 当explicit_defaults_for_timestamp为ON时,该非标准行为将会废弃,该类型和其他类型的行为一致。
    详情请参考大版本升级最佳实践
    2024-06-14 10:12:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像