MySQL无法给date类型的列设置默认值的解决方法 | 您所在的位置:网站首页 › mysql设置系统时间 › MySQL无法给date类型的列设置默认值的解决方法 |
问题
在MySQL中创建表时一个列的数据类型是date,使用系统自带的curdate()想设置成当前日期 CREATE TABLE DATE_TEST( id int, create_date date default curdate() )执行后报错,如下图 将默认值改成CURRENT_DATE还是报同样的错误 解决方法语句之所以会报错,是因为在MySQL中default后只能是一个常量,而不能是一个表达式,如果必须要使用表达式则应该将该表达式整个用小括号包括起来 方法一 将数据类型换成datetime或timestamp,然后使用now()或CURRENT_TIMESTAMP作为默认值前面说default后只能接常量,但是有一个例外就是如果数据类型是datetime或timestamp,那么后面可以接一个对应的时间函数,也就是now()或CURRENT_TIMESTAMP(这两个是等价的),如下面语句 CREATE TABLE DATE_TEST( id int, create_time datetime default now() );正常执行 CREATE TABLE DATE_TEST( id int, create_time timestamp default CURRENT_TIMESTAMP ); 方法二 将default后的函数用括号包起来如果硬要使用date类型,则需要将后面的表达式curdate()或者CURRENT_DATE用括号包起来 CREATE TABLE DATE_TEST( id int, create_date date default (curdate()) )此时可以发现没有问题了 使用CURRENT_DATE也执行正常 插入一条语句试试,可以发现默认值设置成功 参考资料stackOverFlow上相关问题的讨论 MySQL官方文档 对于默认值的处理 与此问题相关的延伸阅读MySQL官方文档 时间数据类型 MySQL官方文档 时间类型相关函数 |
CopyRight 2018-2019 实验室设备网 版权所有 |