
MySQL Workbench 中为 TIMESTAMP 字段设置 CURRENT_TIMESTAMP 默认值失败,通常因指定了非法的精度(fsp)值(如 TIMESTAMP(100))导致;正确做法是将精度限制在 0–6 范围内,推荐使用 TIMESTAMP(0) 或省略精度。
mysql workbench 中为 timestamp 字段设置 `current_timestamp` 默认值失败,通常因指定了非法的精度(fsp)值(如 `timestamp(100)`)导致;正确做法是将精度限制在 0–6 范围内,推荐使用 `timestamp(0)` 或省略精度。
在 MySQL 中,TIMESTAMP 类型支持可选的小数秒精度(fractional seconds precision, fsp),其合法取值范围严格限定为 0 到 6(含)。若指定超出此范围的值(例如 TIMESTAMP(100)),MySQL 将拒绝该定义,并在配合 DEFAULT CURRENT_TIMESTAMP 使用时抛出 ERROR 1067: Invalid default value —— 这正是你遇到错误的根本原因。
✅ 正确的修改语句如下(推荐使用 TIMESTAMP(0),显式声明无毫秒精度):
ALTER TABLE `b2b_appointment`.`invoice` CHANGE COLUMN `date_created` `date_created` TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP;
⚠️ 注意事项:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 若字段已存在且含历史数据,执行 ALTER TABLE 前请确保表中无非法时间值(如 '0000-00-00 00:00:00'),否则可能触发严格模式报错;
- TIMESTAMP 的 CURRENT_TIMESTAMP 默认值仅在首次插入时自动填充;如需更新时也自动刷新(如“最后修改时间”),应额外添加 ON UPDATE CURRENT_TIMESTAMP:
... TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- 自 MySQL 5.6.5+ 起,DATETIME 类型同样支持 CURRENT_TIMESTAMP 默认值及自动更新,若需更宽的时间范围(TIMESTAMP 仅支持 1970–2038),建议优先考虑 DATETIME(0);
- 在 MySQL Workbench 的可视化表编辑器中修改字段时,务必在“Default Value”栏填写 CURRENT_TIMESTAMP,并在“Data Type”中手动输入 TIMESTAMP(0)(而非依赖下拉菜单默认的 TIMESTAMP,因其可能隐式生成不兼容的精度)。
总结:避免硬编码超限精度,坚持 fsp ∈ [0,6],并结合业务需求选择 TIMESTAMP 或 DATETIME —— 简洁、兼容、可靠。










