You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0.21建表时NOT NULL DEFAULT current_timestamp()报错是什么原因?

版本差异说明

MySQL 从 8.0.13 版本开始收紧了字段默认值的类型匹配校验规则,CURRENT_TIMESTAMP() 函数的返回值为 DATETIME / TIMESTAMP 时间类型,不再允许直接作为 INT 类型字段的默认值。你之前用的旧版本校验规则宽松,会自动把 CURRENT_TIMESTAMP() 的返回值隐式转换为整数类型的Unix时间戳,所以建表可以成功。

int(11) 类型字段本身没有被限制不能用时间相关函数做默认值,只是不能直接用返回时间类型的 CURRENT_TIMESTAMP(),需要用返回整数Unix时间戳的函数。

修复方案

根据业务需求选任意一种即可:

  • 完全兼容原有业务逻辑,不需要改PHP代码:把默认值替换为返回整数Unix时间戳的 UNIX_TIMESTAMP() 函数
    `time_requested` int(11) NOT NULL DEFAULT UNIX_TIMESTAMP()
    
  • 调整字段类型为时间类型,符合SQL标准规范:
    `time_requested` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP()
    
    该方案需要同步调整PHP代码的插入逻辑,把原来插入整数时间戳的逻辑改为插入日期格式字符串,或者依赖MySQL的隐式转换完成写入。

内容的提问来源于stack exchange,提问作者Shaun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:15:03