定义MySQL中的默认日期值,类似于时间戳
我正在使用 MySQL(没有人是完美的)4.1 版本,并且我习惯于定义一些时间戳列,如下所示:
ALTER TABLE foo ADD creation TIMESTAMP DEFAULT NOW() ;
我想做完全相同的事情,但是对于 DATE 字段。 原因是我不需要 TIMESTAMP 精度,并且由于 MySQL 中不存在功能索引,因此我无法快速访问具有给定日期的行(无论一天中的哪个时间)。 所以我尝试了以下方法,但它不起作用:
ALTER TABLE foo ADD creation_date DATE DEFAULT CURDATE() ;
ERROR 1067 (42000): Invalid default value for 'creation_date'
或者甚至
ALTER TABLE foo ADD creation_date DATE DEFAULT DATE(NOW()) ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(now())' at line 1
哪个也不起作用。
有任何想法吗?
I'm using MySQL (nobody's perfect), version 4.1 and I'm used to define some timestamp columns like that:
ALTER TABLE foo ADD creation TIMESTAMP DEFAULT NOW() ;
I'd like to do exactly the same thing, but for a DATE field. The reason being I don't need a TIMESTAMP precision and since no functional index exists in MySQL, I cannot access quickly to the rows with a given date (regardless of time of day). So I tried the following but it just does not work:
ALTER TABLE foo ADD creation_date DATE DEFAULT CURDATE() ;
ERROR 1067 (42000): Invalid default value for 'creation_date'
Or even
ALTER TABLE foo ADD creation_date DATE DEFAULT DATE(NOW()) ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(now())' at line 1
Which does not work either.
Any Ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 MySQL 中,默认值必须是常量。
不允许使用函数或表达式。
TIMESTAMP 类型例外,对于该类型,CURRENT_TIMESTAMP 是有效的非常量默认值。
参见4.1手册:数据类型默认值
In MySQL default values have to be constant.
Functions or expressions are not allowed.
The exception ist the TIMESTAMP type, for which CURRENT_TIMESTAMP is a valid non constant default value.
See 4.1 manual: Data Type Default Values