Todo lo relacionado a Internet, Programación y Tecnología

Cómo desactivar el modo estricto o Strict Mode de MySQL y MariaDB

mariadb logo

El modo estricto en MySQL o MariaDB es un modo que nos limita para realizar malas practicas como insertar una cantidad grande de caracteres cuando el limite 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 ejecutara y nos mostrara un error.

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/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_nameValue
sql_modeSTRICT_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.

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 sin espacios.

Temporal

Teniendo en cuenta que NO_ENGINE_SUBSTITUTION ya se encontraba activado y no queremos desactivarlo, solo ejecutamos la primer linea de cada recuadro, en caso de no tener ningún modo anteriormente, usamos la ultima linea 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';'
-- tambien 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';
-- tambien podemos usar el siguiente si no tenemos ningún modo activado:
SET sql_mode = '';

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 este archivo buscamos la opción sql_mode, y eliminamos STRICT_TRANS_TABLES y STRICT_ALL_TABLES. Si el archivo no existe creamos la variable y la establecemos como vacía.

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 = ""

Nota: Si la opción sql_mode no existe se activan los modos que de forma predeterminada están establecidos, y en el caso del STRICT_TRANS_TABLES, en las ultimas versiones esta activado de forma predeterminada.

Escrito por Alan en 2018-04-02 13:37:00 UTC

Enlace permanente - categorías: Software y Apps, Programación - etiquetas: mariadb, mysql

« Cómo activar Flash en Google Chrome en Windows para cada sitio web - El IMEI y de qué forma podemos proteger un teléfono después de un robo »