Navicat 中需点击 fx 按钮启用表达式模式输入 CURRENT_TIMESTAMP(不加引号)才能正确设为函数默认值;DATETIME 类型需 MySQL 5.6.5+ 支持;ON UPDATE 需单独设置;DATE 字段应使用 CURRENT_DATE 并同样启用表达式模式。
Navicat 里 CURRENT_TIMESTAMP 默认值总变字符串?必须点 fx 按钮
直接在「默认值」框里输 current_timestamp,保存后建表语句变成 default 'current_timestamp'——这是字符串字面量,不是函数调用。根本原因:navicat 默认把输入当常量处理。
正确做法是:
- 选中字段(类型必须是
TIMESTAMP或DATETIME) - 在右侧属性面板找到「默认值」一栏,点击右侧的
fx按钮(或勾选「表达式」复选框) - 在弹出的表达式窗口中输入
CURRENT_TIMESTAMP(不加引号、不加括号) - 确认后该列会显示为
EXPRESSION: CURRENT_TIMESTAMP
不点 fx 就等于白设,MySQL 服务端完全收不到函数语义。
DATETIME 字段设 CURRENT_TIMESTAMP 报错 ERROR 1067?查 MySQL 版本
DATETIME DEFAULT CURRENT_TIMESTAMP 在 MySQL 5.6.5 之前不支持,老版本会直接报错:ERROR 1067 (42000): Invalid default value for 'created_at'。
验证方式很简单:
- 右键表 →「对象信息」→ 切到「创建语句」标签页
- 检查生成的 DDL 是否含
DEFAULT CURRENT_TIMESTAMP(无引号) - 如果看到
DEFAULT 'CURRENT_TIMESTAMP'或压根没这一行,说明设置失败或版本不兼容
MySQL 5.5 及更早版本只能对 TIMESTAMP 用该语法;若无法升级,改用 TIMESTAMP 类型是最稳妥的降级方案。
要自动更新时间(ON UPDATE),不能只设默认值
设了 CURRENT_TIMESTAMP 默认值,不代表字段会在 UPDATE 时自动刷新。这是两个独立开关。
必须额外操作:
- 在同一字段属性中,找到「ON UPDATE」选项(不是「默认值」那一栏)
- 勾选它,并在右侧表达式框中再次输入
CURRENT_TIMESTAMP - MySQL 8.0+ 支持毫秒精度如
ON UPDATE CURRENT_TIMESTAMP(3),但 Navicat 图形界面不支持带括号写法,得手动改 SQL
注意:MySQL 规定,一个表中多个 TIMESTAMP 字段都设 CURRENT_TIMESTAMP 时,只有第一个能同时拥有默认值和自动更新;第二个起只能二选一。
CURRENT_DATE 和 NOW() 哪个更适合 DATE 字段?
对纯日期字段(DATE 类型),必须用 CURRENT_DATE。原因很实际:
-
NOW()返回DATETIME,插入DATE字段会触发隐式截断,在严格模式下直接报错 -
CURDATE()虽语义等价,但 Navicat 部分版本识别不稳定,可能拒绝保存 -
CURRENT_DATE是 SQL 标准关键字,兼容性最好,且必须同样启用fx表达式模式
别图省事跳过 fx 步骤——哪怕你用的是 CURRENT_DATE,不点它照样存成字符串。
最容易被忽略的点:MySQL 服务端版本、字段类型、Navicat 表达式开关,三者缺一不可。少一个,就只是看着设置了,实际无效。


















