Search code examples
mysqlcreate-table

ERROR 1067 Invalid defaul value for 'created_at'


I am creating a table with the following script

CREATE TABLE `ninjapizza`.`products` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(45) NULL,
  `description` VARCHAR(45) NULL,
  `email` VARCHAR(45) NULL,
  `created_on` TIMESTAMP(2) NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`));

But on Apply I get the following message

Operation failed: There was an error while applying the SQL script to the database.
Executing:
CREATE TABLE `ninjapizza`.`products` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(45) NULL,
  `description` VARCHAR(45) NULL,
  `email` VARCHAR(45) NULL,
  `created_on` TIMESTAMP(2) NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`));

ERROR 1067: Invalid default value for 'created_on'
SQL Statement:
CREATE TABLE `ninjapizza`.`products` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(45) NULL,
  `description` VARCHAR(45) NULL,
  `email` VARCHAR(45) NULL,
  `created_on` TIMESTAMP(2) NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`))

I have also executed the following command

SET sql_mode = 'ALLOW_INVALID_DATES';

But still getting the error. Can someone please guide.


Solution

  • 'If a TIMESTAMP or DATETIME column definition includes an explicit fractional seconds precision value anywhere, the same value must be used throughout the column definition' https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

    SEE https://www.db-fiddle.com/f/sNoeVP5PATCsGxhVw2vPki/0