Navicat 中设 CURRENT_TIMESTAMP 为默认值需启用「表达式」功能(点击 fx 按钮),否则会被存为字符串;仅 TIMESTAMP/DATETIME 类型支持,且 MySQL ≥5.6.5 才支持 DATETIME;自动更新需额外勾选「ON UPDATE CURRENT_TIMESTAMP」。
Navicat 里设字段默认值为 CURRENT_TIMESTAMP,不能直接输字符串
在 navicat 的表设计界面里,给 datetime 或 timestamp 字段填“current_timestamp”作为默认值,如果只是在「默认值」输入框里敲 current_timestamp(不带引号),多数情况下会失败——navicat 会把它当普通字符串存进去,最终建表语句变成 default 'current_timestamp',而不是真正的函数表达式。
必须用 Navicat 的「表达式」功能启用函数默认值
Navicat 提供了专门的「表达式」开关来区分字面量和函数调用:
- 选中目标字段 → 在右侧属性面板找到「默认值」设置项
- 点击默认值输入框右侧的 fx 按钮(或勾选「表达式」复选框)
- 此时输入框变为表达式模式,再输入
CURRENT_TIMESTAMP(不加引号、不加括号也行,MySQL 5.6+ 支持无括号写法) - 保存表结构时,Navicat 才会生成正确的
DEFAULT CURRENT_TIMESTAMP
注意:这个表达式只对 TIMESTAMP 和 DATETIME 类型生效;对 INT 或 VARCHAR 强行设 CURRENT_TIMESTAMP 表达式会报错。
MySQL 版本差异影响能否用 CURRENT_TIMESTAMP 做 DATETIME 默认值
MySQL 5.6.5 之前,CURRENT_TIMESTAMP 只能用于 TIMESTAMP 字段;5.6.5+ 开始才支持 DATETIME DEFAULT CURRENT_TIMESTAMP。如果你连的是老版本 MySQL,即使 Navicat 设置成功,执行建表也会报错:
ERROR 1067 (42000): Invalid default value for 'created_at'
验证方式很简单:在 Navicat 中右键表 →「对象信息」→ 查看「创建语句」,确认生成的 SQL 是否含 DEFAULT CURRENT_TIMESTAMP 而非 DEFAULT 'CURRENT_TIMESTAMP'。
自动更新时间字段要额外勾选「ON UPDATE CURRENT_TIMESTAMP」
如果还需要该字段随记录更新而自动刷新(比如 updated_at),仅设默认值不够:
- 同样进入字段属性 → 找到「ON UPDATE」选项(不是「默认值」)
- 勾选它,并在右侧表达式框中输入
CURRENT_TIMESTAMP - MySQL 8.0+ 还支持
ON UPDATE CURRENT_TIMESTAMP(3)带毫秒精度,但 Navicat 的图形界面不支持手动输括号参数,得用「原始 SQL 编辑」方式补全
一个容易被忽略的点:MySQL 规定,如果表中有多个 TIMESTAMP 字段且都设了 CURRENT_TIMESTAMP,只有第一个能同时拥有默认值和自动更新;后续字段必须显式声明 NULL 或 DEFAULT NULL 才能绕过限制。











