Navicat中填CURRENT_TIMESTAMP不勾“表达式”会存为字符串,必须点fx按钮或勾选“表达式”并确保字段为TIMESTAMP/DATETIME、MySQL≥5.6.5;updated_at需单独设ON UPDATE CURRENT_TIMESTAMP;DATETIME默认值建议手写SQL;导出SQL需勾选“导出扩展属性”。
直接在 navicat 里填“current_timestamp”或“current_date”进默认值框,不勾「表达式」就一定失效——它会被存成字符串 'current_timestamp',不是函数调用。
为什么填了 CURRENT_TIMESTAMP 却没生效
Navicat 默认把「默认值」输入框当纯文本处理。你手动敲 CURRENT_TIMESTAMP,它自动加单引号生成 DEFAULT 'CURRENT_TIMESTAMP',MySQL 插入时就真存了个字符串。
- 必须点击默认值输入框右侧的
fx按钮(或勾选「表达式」复选框),切换到表达式模式再输CURRENT_TIMESTAMP(不带引号、括号可省) - 字段类型只能是
TIMESTAMP或DATETIME;DATE类型只能用CURRENT_DATE - MySQL 版本必须 ≥ 5.6.5,否则建表会报错:
ERROR 1067 (42000): Invalid default value for 'xxx'
设置 updated_at 自动更新要额外操作
设了默认值只是插入时填时间,更新时不自动变。想让它随记录修改而刷新,得单独配 ON UPDATE CURRENT_TIMESTAMP。
- 在字段属性里找到「ON UPDATE」选项(不是「默认值」那一栏)
- 勾选它,并在右侧表达式框中输入
CURRENT_TIMESTAMP - MySQL 8.0+ 支持毫秒精度写法如
ON UPDATE CURRENT_TIMESTAMP(3),但 Navicat 图形界面不支持手动输括号,得切到「SQL」页手写 - 注意 MySQL 限制:一个表最多只有一个
TIMESTAMP字段能同时拥有DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP;第二个字段即使配了,执行后也不生效
DATETIME 字段在 Navicat 里更难配默认值
Navicat 对 DATETIME 的函数默认值支持比 TIMESTAMP 弱得多——界面下拉菜单常不显示 CURRENT_TIMESTAMP,甚至「表达式」模式也容易被忽略。
- 最稳的方式是右键表 →「设计表」→ 切到右上角「SQL」标签页 → 手动在字段定义后追加
DEFAULT CURRENT_TIMESTAMP - 例如原句:
`created_at` DATETIME→ 改成:`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP - 如果还要自动更新,补全:
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP - 别依赖「设计表」界面的「自动更新」勾选项——它对
DATETIME类型基本无效
导出 SQL 时默认值经常消失
从 Navicat 「转储 SQL 文件」导出建表语句,DEFAULT CURRENT_TIMESTAMP 很可能被悄悄删掉,不是 Bug,是 Navicat 默认关闭「扩展属性」导出以保兼容性。
- 导出前务必点开导出设置 → 勾选「导出扩展属性」或类似选项(不同版本文字略有差异)
- 导出后立刻检查生成的 SQL,确认含
DEFAULT CURRENT_TIMESTAMP(无引号)而非DEFAULT 'CURRENT_TIMESTAMP' - 若已导出却漏了,默认值得手动补回,否则重建表时全丢
最容易被忽略的是:字段允许为 NULL 时,哪怕设了默认值,插 NULL 也会存 NULL 而非触发默认值;所以时间字段建议同步勾选「非空」。


















