type number now error current_timestamp current mysql

mysql - number - Valor predeterminado no válido para el campo de marca de tiempo ''create_date''



mysql time default value (11)

Tengo la siguiente declaración SQL create

mysql> CREATE TABLE IF NOT EXISTS `erp`.`je_menus` ( -> `id` INT(11) NOT NULL AUTO_INCREMENT , -> `name` VARCHAR(100) NOT NULL , -> `description` VARCHAR(255) NOT NULL , -> `live_start_date` DATETIME NULL DEFAULT NULL , -> `live_end_date` DATETIME NULL DEFAULT NULL , -> `notes` VARCHAR(255) NULL , -> `create_date` TIMESTAMP NOT NULL DEFAULT ''0000-00-00 00:00:00'', -> `created_by` INT(11) NOT NULL , -> `update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , -> `updated_by` INT(11) NOT NULL , -> `status` VARCHAR(45) NOT NULL , -> PRIMARY KEY (`id`) ) -> ENGINE = InnoDB;

dando el siguiente error

ERROR 1067 (42000): Invalid default value for ''create_date''

¿Cuál es el error aquí?


Con OS X , instale mysql desde Homebrew , variables del sistema en función de sus valores predeterminados compilados. La solución es eliminar "NO_ZERO_DATE" de las variables del sistema "sql_mode".

Solo por favor tenga en cuenta que el alcance involucra.

Si desea afectar solo en su sesión, use "@@session" , por ejemplo:

SET @@session.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".

En este caso, no afectará una vez que finalice su sesión o la cambie. No tiene efecto en otra sesión.

Si desea afectar a todos los clientes, utilice "@@global" , por ejemplo:

SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".

En este caso, solo afecta a los clientes que se conectan después del cambio (no afecta a todos los clientes actuales), y no funcionará una vez que el servidor salga.


En Ubuntu Desktop 16.04, hice esto:

  1. abrir archivo: /etc/mysql/mysql.conf.d/mysqld.cnf en un editor de su elección.

  2. Busque: sql_mode , estará en algún lugar debajo de [mysqld] .

  3. y establece sql_mode a lo siguiente:

    NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

  4. Guarde y reinicie el servicio de mysql haciendo:

    sudo service mysql restart

Espero que esto ayude a alguien.


Es posible que desee examinar la configuración de la zona horaria en la instancia de MySql:

mysql> show variables like ''time_zone''; +---------------+--------+ | Variable_name | Value | +---------------+--------+ | time_zone | SYSTEM | +---------------+--------+

en mi caso, me di cuenta de que el sistema subyacente tenía su zona horaria configurada en BST en lugar de UTC, y así en la tabla de creación el valor predeterminado de ''1970-01-01 00:00:01'' se coaccionaba 1 hora atrás, lo que resulta en un valor de marca de tiempo no válido.

Para mí, en realidad quería que la zona horaria de la máquina se configurara en UTC, y eso me solucionó. Cuando estaba ejecutando Centos / 7, simplemente lo hice

# timedatectl set-timezone UTC

y reinició todo.


Eso es debido al modo SQL del servidor - NO_ZERO_DATE .

De la referencia: NO_ZERO_DATE - En modo estricto, no permita que ''0000-00-00'' sea ​​una fecha válida. Todavía puede insertar fechas cero con la opción IGNORE . Cuando no está en modo estricto, la fecha es aceptada pero se genera una advertencia.


Para deshabilitar el modo SQL estricto

Create disable_strict_mode.cnf file at /etc/mysql/conf.d/

En el archivo, ingrese estas dos líneas:

[mysqld] sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Finalmente, reinicie MySQL con este comando:

sudo service mysql restart


Para evitar este problema, debe eliminar NO_ZERO_DATE de la configuración del modo mysql.

  1. Ir a ''phpmyadmin''.
  2. Una vez que phpmyadmin esté cargado, haga clic en la pestaña ''variables''.
  3. Busque ''modo sql''.
  4. Haga clic en la opción Editar y elimine NO_ZERO_DATE (y su coma posterior) de la configuración.

Este es un problema muy común en el entorno local con wamp o xamp.


Podrías cambiar esto:

`create_date` TIMESTAMP NOT NULL DEFAULT ''0000-00-00 00:00:00'',

Para algo como esto:

`create_date` TIMESTAMP NOT NULL DEFAULT ''2018-04-01 12:00:00'',


Pude resolver este problema en OS X instalando MySQL desde Homebrew

brew install mysql

agregando lo siguiente a /usr/local/etc/my.cnf

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

y reiniciando MySQL

brew tap homebrew/services brew services restart mysql


Si generó el script desde el banco de trabajo MySQL. se genera la siguiente línea SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=''TRADITIONAL,ALLOW_INVALID_DATES''; Elimine TRADITIONAL de SQL_MODE, y luego la secuencia de comandos debería funcionar bien

de lo contrario, podría establecer SQL_MODE como Permitir fechas inválidas SET SQL_MODE=''ALLOW_INVALID_DATES''; .


TIMESTAMP tiene un rango de ''1970-01-01 00:00:01'' UTC a ''2038-01-19 03:14:07'' UTC (ver doc ). El valor predeterminado debe estar dentro de ese rango.

Otro comportamiento extraño, relacionado:

CREATE TABLE tbl1 ( ts TIMESTAMP); Query OK, 0 rows affected (0.01 sec) CREATE TABLE tbl2 ( ts TIMESTAMP, ts2 TIMESTAMP); ERROR 1067 (42000): Invalid default value for ''ts2'' CREATE TABLE tbl3 ( ts TIMESTAMP, ts2 TIMESTAMP DEFAULT ''1970-01-01 00:00:01''); Query OK, 0 rows affected (0.01 sec)

Nota al margen, si desea insertar NULLS:

CREATE TABLE tbl4 ( ts TIMESTAMP NULL DEFAULT NULL);


Tuve un problema similar con MySQL 5.7 con el siguiente código:

`update_date` TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP

Lo arreglé usando esto en su lugar:

`update_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP