Cuando intenté modificar la tabla, mostró el error:
ERROR 1067 (42000): Invalid default value for 'created_at'
Busqué en Google este error, pero todo lo que encontré fue como si intentaran alterar la marca de tiempo para que ocurriera. Sin embargo, aquí estoy tratando de agregar una nueva columna y recibo este error:
mysql> ALTER TABLE investments ADD bank TEXT;
ERROR 1067 (42000): Invalid default value for 'created_at'
y las dos últimas columnas de mi tabla son created_at
y updated_at
.
Aquí está la estructura de mi tabla:
Respuestas:
El problema se debe a sql_modes . Por favor verifique sus sql_modes actuales por comando:
show variables like 'sql_mode' ;
Y elimine 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 mediante el comando:
set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
fuente
Simplemente, antes de ejecutar cualquier declaración, coloque esto en la primera línea:
SET sql_mode = '';
fuente
NO_ZERO_IN_DATE,NO_ZERO_DATE
solo nos permite mantener otras características de seguridad:SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
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 comando a continuación que funcionó permitiendo que se instalara la base de datos
SET GLOBAL sql_mode = '';
fuente
SET sql_mode = '';
ahora está en desuso,SET GLOBAL sql_mode = ''
está bienIntente 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 recibe este error es porque no está configurando un valor predeterminado para los campos
created_at
yupdated_at
. MySQL no acepta su comando ya que los valores de estas columnas no pueden ser nulos.Espero que esto ayude.
fuente
En mi caso tengo un archivo para importar. Así que simplemente agregué SET sql_mode = ''; al principio del archivo y funciona!
fuente
Ejecute esta consulta:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00";
esto funciona para mi
fuente
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;
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 []>
fuente
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.
fuente
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í los pasos para actualizar MariaDB 5.5 a MariaDB 10.1 en CentOS 7 (64 bits)
Agregue las siguientes líneas al repositorio de MariaDB.
nano /etc/yum.repos.d/mariadb.repo
y pega las siguientes líneas.service mariadb stop
Realizar actualización
yum update
Iniciar MariaDB y realizar la actualización
service mariadb start
mysql_upgrade
Todo hecho.
Verifique la versión de MariaDB:
mysql -V
NOTA : Siempre haga una copia de seguridad de las bases de datos antes de realizar actualizaciones. Los datos se pueden perder si la actualización falla o si algo salió mal.
fuente
SET GLOBAL sql_mode = '';
Resuelto mi problema.
fuente
Simplemente conviértalo por esta línea:
para la nueva mesa:
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
para la mesa existente:
Alter ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Fuente :
https://dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html
fuente
Para Mysql5.7, inicie sesión en la línea de comando de mysql y ejecute el comando,
mysql> show variables like 'sql_mode' ;
Mostrará que NO_ZERO_IN_DATE, NO_ZERO_DATE en sql_mode.
Intente agregar una línea debajo de [mysqld] en su archivo de configuración de mysql 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!
fuente
Para Mysql8.0.18:
Eliminar "([fsp])", resolvió mi problema.
fuente
Primero, verifique que los modos existentes estén usando el siguiente comando en su terminal:
$ mysql -u root -p -e "SHOW VARIABLES LIKE 'sql_mode';"
o
mysql> show variables like 'sql_mode';
Vería una salida como la siguiente
Deshabilitar modo (s) a través de my.cnf: en este caso, debe eliminar los modos NO_ZERO_IN_DATE, NO_ZERO_DATE
Abra el archivo my.cnf (generalmente puede encontrar el archivo my.cnf ubicado en /etc/my.cnf o /etc/mysql/my.cnf)
Modos de actualización en my.cnf bajo el
[mysqld]
encabezadosql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Aquí he omitido los modos NO_ZERO_IN_DATE, NO_ZERO_DATE
Reinicie el servidor mysql
$ /etc/init.d/mysql restart
fuente