El modo estricto en MySQL o MariaDB es un modo que nos limita y no nos deja realizar malas prácticas, como insertar una cantidad grande de caracteres cuando el límite es bajo en un determinado campo. Hacer esto puede tener dos consecuencias dependiendo de la versión que usemos, por ejemplo, puede recortar nuestros datos y mostrar una advertencia, o la declaración no se ejecutará y nos mostrará un error, y ninguna de las dos cosas es necesariamente de nuestro agrado.
Comprobar si el 'Strict Mode' está activado
Para ello accedemos por la terminal a MySQL con nuestro usuario y contraseña o con algún software como phpMyAdmin en un servidor web, HeidiSQL en Windows, o DBeaver en Linux, Mac, y Windows. Ejecutamos los siguientes comandos según el caso.
Desde una terminal, cambiar root
por el usuario que usemos, nos pedirá contraseña:
mysql -u root -p -e 'SHOW VARIABLES LIKE "sql_mode";'
Desde HeidiSQL, PhpMyAdmin o DBeaver:
SHOW VARIABLES LIKE "sql_mode";
Resultado en terminal:
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
Resultado con HeidiSQL:
Variable_name | Value |
---|---|
sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
En cualquier caso, si aparece el texto STRICT_TRANS_TABLES
o STRICT_ALL_TABLES
, significa que el modo estricto se encuentra activado.
Desactivar el 'Strict Mode' de forma temporal o permanente
Existen dos formas de desactivar este modo, la primera es temporal y la segunda permanente. La forma temporal podría ser útil para depurar o para la ejecución de declaraciones SQL problemáticas. En cambio, la solución permanente podría ser útil cuando usamos sistemas que lo requieren, como por ejemplo al instalar Directus un CMS Headless, que en la documentación menciona que es necesario desactivar este modo.
Notas del procedimiento: Es recomendado que al desactivar este modo hay que copiar los otros modos que se encontraban activados, y solo restarle STRICT_TRANS_TABLES
y STRICT_ALL_TABLES
, los modos tienen que estar separados con coma y sin espacios.
Desactivado de forma temporal
Teniendo en cuenta que NO_ENGINE_SUBSTITUTION
ya se encontraba activado y no queremos desactivarlo, solo ejecutamos la primera línea de cada recuadro, en caso de no tener ningún modo anteriormente, usamos la última línea de cada recuadro según sea el caso.
Para desactivarlo desde la terminal de forma temporal, solo tenemos que ejecutar el siguiente comando (reemplazando "root" por nuestro usuario):
mysql -u root -p -e 'SET sql_mode = 'NO_ENGINE_SUBSTITUTION';'
También podemos usar el siguiente si no tenemos ningún modo activado:
mysql -u root -p -e 'SET sql_mode = '';'
Para hacerlo desde un gestor ejecutar la declaración directamente:
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
O bien podemos usar el siguiente si no tenemos ningún modo activado:
SET sql_mode = '';
Desactivado de forma permanente
Esto es un poco más sencillo, solo tenemos que editar nuestro archivo my.cnf
o equivalente, en Debian el archivo se encuentra en la ruta /etc/mysql/my.cnf
y en Windows con MariaDB se encuentra en C:\Program Files\MariaDB 10.3\data\my.ini
, en algunas ocasiones puede estar en /etc/mysql/mariadb.conf.d/50-server.cnf
en el caso de MariaDB.
En este archivo buscamos la opción sql_mode
, y eliminamos STRICT_TRANS_TABLES
y STRICT_ALL_TABLES
. Si el archivo o variable no existe, la creamos y la establecemos como vacía en la sección [mysqld]
.
Si tenemos otros modos activados que no queremos desactivar:
sql_mode = "NO_ENGINE_SUBSTITUTION"
Si la opción no existe o si queremos desactivar todos los modos:
sql_mode = ""