valor updated_at por para invalido invalid id_producto for error defecto comment_date mysql

mysql - updated_at - ERROR 1067(42000): valor predeterminado no válido para ''created_at''



invalid default value mysql (13)

Como se menciona en la respuesta de @Bernd Buffen. Este es un problema con MariaDB 5.5, simplemente actualizo MariaDB 5.5 a MariaDB 10.1 y el problema se resolvió.

Aquí Pasos para actualizar MariaDB 5.5 a MariaDB 10.1 en CentOS 7 (64-Bit)

  1. Agregue las siguientes líneas al repositorio MariaDB.

    nano /etc/yum.repos.d/mariadb.repo y pegue las siguientes líneas.

[mariadb]
nombre = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1

  1. Detener MariaDB, si ya está ejecutando el service mariadb stop
  2. Realizar actualización

    yum update

  3. Inicio de MariaDB y actualización

    service mariadb start

    mysql_upgrade

Todo hecho.

Verifique la versión de MariaDB: mysql -V

NOTA : Siempre realice una copia de seguridad de las bases de datos antes de realizar actualizaciones. Se pueden perder datos si la actualización falla o si algo sale mal.

Cuando traté de alterar la tabla, se muestra un error

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

busqué este error en Google, pero todo lo que encontré es que si intentaron alterar la marca de tiempo, se produjo este error, pero aquí estoy tratando de agregar una nueva columna y obtengo este error

mysql> ALTER TABLE investments ADD bank TEXT; ERROR 1067 (42000): Invalid default value for ''created_at''

y mi tabla tiene las últimas dos columnas, son created_at y updated_at

aquí está la estructura de mi mesa


Ejecute esta consulta:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00";

esto funciona para mi


El problema se debe a sql_modes . Verifique sus sql_modes actuales por comando:

show variables like ''sql_mode'' ;

Y elimine el sql_mode " NO_ZERO_IN_DATE, NO_ZERO_DATE " para que funcione. Este es el sql_mode predeterminado en las nuevas versiones de mysql.

Puede establecer sql_mode globalmente como root por comando:

set global sql_mode = ''ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'';


En mi caso tengo un archivo para importar. Entonces simplemente agregué SET sql_mode = ''''; al principio del archivo y funciona!


Intenta ejecutar el siguiente comando:

ALTER TABLE `investments` MODIFY created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;

y

ALTER TABLE `investments` MODIFY updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;

La razón por la que obtiene este error es porque no está configurando un valor predeterminado para los campos created_at y updated_at . MySQL no acepta su comando ya que los valores para estas columnas no pueden ser nulos.

Espero que esto ayude.


Me encontré con el mismo error al intentar instalar una base de datos de terceros. Probé la solución propuesta sin éxito, es decir
SET sql_mode = '''';

Luego probé el siguiente comando que funcionó permitiendo que se instalara la base de datos
SET GLOBAL sql_mode = '''';


Para Mysql5.7, inicie sesión en la línea de comando mysql y ejecute el comando mysql> show variables como ''sql_mode''; Mostrará ese NO_ZERO_IN_DATE, NO_ZERO_DATE en sql_mode.

Intente agregar una línea debajo de [mysqld] en su archivo mysql conf para eliminar las dos opciones, la mía (mysql 5.7 en Ubuntu 16) es /etc/mysql/mysql.conf.d/mysqld.cnf

Ahora reinicie mysql. ¡Funciona!


Puedes hacerlo así:

CREATE TABLE `ttt` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `t1` TIMESTAMP NULL DEFAULT ''0000-00-00 00:00:00'', `t2` TIMESTAMP NULL DEFAULT ''0000-00-00 00:00:00'', `t3` TIMESTAMP NULL DEFAULT ''0000-00-00 00:00:00'', `t4` TIMESTAMP NULL DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;

  • Debido a que el valor TIMESTAMP se almacena como Epoch Seconds, el valor de marca de tiempo ''1970-01-01 00:00:00'' (UTC) está reservado ya que el segundo # 0 se usa para representar ''0000-00-00 00:00:00 ''.
  • En MariaDB 5.5 y anteriores solo podía haber una columna TIMESTAMP por tabla que tuviera CURRENT_TIMESTAMP definido como su valor predeterminado. Este límite ya no se aplica desde MariaDB 10.0.

ver: https://mariadb.com/kb/en/mariadb/timestamp/

muestra

MariaDB []> insert into ttt (id) VALUES (1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 MariaDB []> select * from ttt; +----+---------------------+---------------------+---------------------+---------------------+ | id | t1 | t2 | t3 | t4 | +----+---------------------+---------------------+---------------------+---------------------+ | 1 | 0000-00-00 00:00:00 | 2000-01-01 12:01:02 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | | 2 | 0000-00-00 00:00:00 | 2000-01-01 12:01:02 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | | 3 | 0000-00-00 00:00:00 | 2000-01-01 12:01:02 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | +----+---------------------+---------------------+---------------------+---------------------+ 3 rows in set (0.00 sec) MariaDB []>


Si recibe este error al Copy database de Copy database en phpmyadmin , puede hacer lo siguiente:

Simplemente marque la casilla Add DROP TABLE / DROP VIEW .



Simplemente, antes de ejecutar cualquier declaración, ponga esto en la primera línea:

SET sql_mode = '''';


Tuve un problema similar Lo siguiente lo resolvió:

Cambio:

recollect_date TIMESTAMP DEFAULT ''CURRENT_TIMESTAMP'',

a:

recollect_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

es decir, simplemente elimine las comillas alrededor de CURRENT_TIMESTAMP .

Espero que esto ayude a alguien.


SET GLOBAL sql_mode = '''';

Resuelto mi problema