新建表时需手动在Navicat 15「默认值」栏输入CURRENT_TIMESTAMP(不加引号、括号),仅TIMESTAMP或MySQL 5.6.5+的DATETIME支持;输错格式会被当字符串,ON UPDATE须手写SQL或检查SQL预览。

新建表时直接填 CURRENT_TIMESTAMP 就能设创建时间
Navicat 15 对 MySQL 5.6.5+ 支持良好,DATETIME 和 TIMESTAMP 类型都可设默认值为 CURRENT_TIMESTAMP。关键不是点菜单、也不是选“当前时间”选项——必须手动在「默认值」栏输入 CURRENT_TIMESTAMP(不加引号、不加括号、不写 CURRENT_TIMESTAMP())。输错格式(比如带空格或小写 current_timestamp)会导致 Navicat 自动转成字符串字面量,保存后变成 'CURRENT_TIMESTAMP',MySQL 就会报错或存成 0000-00-00。
常见踩坑点:
-
DATETIME字段设CURRENT_TIMESTAMP前,务必确认 MySQL 版本 ≥ 5.6.5;低于该版本只能用TIMESTAMP - 如果字段是
TIMESTAMP且是表中第一个TIMESTAMP列,MySQL 会隐式加上ON UPDATE CURRENT_TIMESTAMP,哪怕你没勾选——这容易导致更新时间被意外覆盖 - 字段类型若为
NOT NULL,又没设默认值,建表会失败;但设了CURRENT_TIMESTAMP后,NOT NULL是合法的
更新时间字段必须手写 ON UPDATE CURRENT_TIMESTAMP
Navicat 15 界面里没有独立的「更新时自动设为当前时间」开关(尤其对 DATETIME 类型),那个「自动更新」复选框只对 TIMESTAMP 类型可见,且仅出现在较新版本中。最稳的方式是:点击右下角「SQL 预览」,检查生成语句是否含 ON UPDATE CURRENT_TIMESTAMP;如果没有,就手动补上再执行。
例如,想让 update_time 在每次 UPDATE 时刷新,字段定义应类似:
update_time DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
注意:DEFAULT NULL 是显式声明,避免与 create_time 的 DEFAULT CURRENT_TIMESTAMP 冲突;若写成 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,MySQL 5.6.5+ 允许,但某些旧版 Navicat 可能解析异常。
批量添加字段?别点「+字段」,用 TAB 键快速循环
在「设计表」界面,最快添加多个时间字段的方式不是反复点「+字段」按钮,而是靠键盘操作:
- 输完字段名(如
create_time)后按TAB→ 自动新增一行,光标跳到「数据类型」列 - 选
DATETIME或TIMESTAMP后再按TAB→ 光标跳到「长度/精度」(可留空) - 按
TAB进入「默认值」栏,输入CURRENT_TIMESTAMP,再按TAB进入下一行 - 重复以上流程,一口气加完
create_time和update_time,全程不用鼠标
如果按 TAB 没反应,说明焦点不在字段名输入框——先点一下字段名再试。
已有模型表想补字段?用 ALTER TABLE ... MODIFY COLUMN
对已存在的模型表(比如从 ER 图生成的空表),不能只改默认值,得用 MODIFY COLUMN 显式重定义字段结构。Navicat 会帮你生成语句,但你要核对两处:
- 是否保留了原字段的
NOT NULL/NULL属性(比如原字段是NULL,但新加的DEFAULT CURRENT_TIMESTAMP要求它非空,就得同步改属性) -
update_time字段是否带ON UPDATE CURRENT_TIMESTAMP—— Navicat 不会自动生成这部分,必须进「SQL 预览」手动加 - 如果字段已有数据,MySQL 允许对
NOT NULL字段加DEFAULT,但会把历史行的该字段设为默认值(如0000-00-00 00:00:00),这点容易被忽略
真正麻烦的不是语法,而是时间精度一致性:如果用了 CURRENT_TIMESTAMP(3),那字段类型必须是 DATETIME(3) 或 TIMESTAMP(3),否则建表直接报 ERROR 1067 (42000)。











