SQL表添加用户创建时间默认列时GETDATE()不可用于DEFAULT子句问题
问题原因与解决办法
这个报错的核心原因是你使用的数据库不支持GETDATE()作为列默认值,不同数据库的时间函数、默认值语法存在差异,对应不同数据库的解决方案如下:
1. 如果你用的是MySQL/MariaDB
MySQL没有GETDATE()函数,你需要用CURRENT_TIMESTAMP,修改后的语句为:
ALTER TABLE users ADD COLUMN timeCreated datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;
如果需要同步记录行更新时间,可以额外加ON UPDATE CURRENT_TIMESTAMP配置。
2. 如果你用的是SQLite
SQLite也没有GETDATE()函数,需要使用内置的时间函数获取当前时间:
ALTER TABLE users ADD COLUMN timeCreated datetime NOT NULL DEFAULT (datetime('now'));
3. 如果你用的是SQL Server
正常情况下SQL Server支持GETDATE()作为默认值,出现该报错通常是SQL Server版本低于2008、或开启了低版本兼容性模式导致的,你可以替换为兼容性更好的SQL标准语法CURRENT_TIMESTAMP:
ALTER TABLE users ADD COLUMN timeCreated datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;
也可以尝试去掉GETDATE()外层的括号再执行:
ALTER TABLE users ADD COLUMN timeCreated datetime NOT NULL DEFAULT GETDATE();
额外排查点
- 检查当前数据库账号是否有修改表结构、设置默认值的权限
- 确认表中已有的旧数据不会和
NOT NULL约束冲突,如果有旧数据可以先允许字段为NULL,设置完默认值后批量更新旧数据的timeCreated值,最后再修改约束为NOT NULL
内容的提问来源于stack exchange,提问作者random person
相关产品推荐
相关产品推荐

