How do you set a default value for a MySQL Datetime column? How do you set a default value for a MySQL Datetime column? mysql mysql

How do you set a default value for a MySQL Datetime column?


IMPORTANT EDIT:It is now possible to achieve this with DATETIME fields since MySQL 5.6.5, take a look at the other post below...

Previous versions can't do that with DATETIME...

But you can do it with TIMESTAMP:

mysql> create table test (str varchar(32), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);Query OK, 0 rows affected (0.00 sec)mysql> desc test;+-------+-------------+------+-----+-------------------+-------+| Field | Type        | Null | Key | Default           | Extra |+-------+-------------+------+-----+-------------------+-------+| str   | varchar(32) | YES  |     | NULL              |       | | ts    | timestamp   | NO   |     | CURRENT_TIMESTAMP |       | +-------+-------------+------+-----+-------------------+-------+2 rows in set (0.00 sec)mysql> insert into test (str) values ("demo");Query OK, 1 row affected (0.00 sec)mysql> select * from test;+------+---------------------+| str  | ts                  |+------+---------------------+| demo | 2008-10-03 22:59:52 | +------+---------------------+1 row in set (0.00 sec)mysql>

CAVEAT: IF you define a column with CURRENT_TIMESTAMP ON as default, you will need to ALWAYS specify a value for this column or the value will automatically reset itself to "now()" on update. This means that if you do not want the value to change, your UPDATE statement must contain "[your column name] = [your column name]" (or some other value) or the value will become "now()". Weird, but true. I am using 5.5.56-MariaDB


In version 5.6.5, it is possible to set a default value on a datetime column, and even make a column that will update when the row is updated. The type definition:

CREATE TABLE foo (    `creation_time`     DATETIME DEFAULT CURRENT_TIMESTAMP,    `modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP)

Reference:http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html


MySQL (before version 5.6.5) does not allow functions to be used for default DateTime values. TIMESTAMP is not suitable due to its odd behavior and is not recommended for use as input data. (See MySQL Data Type Defaults.)

That said, you can accomplish this by creating a Trigger.

I have a table with a DateCreated field of type DateTime. I created a trigger on that table "Before Insert" and "SET NEW.DateCreated=NOW()" and it works great.

I hope this helps somebody.