MariaDB 10.5, cambiar sql_mode en .cnf no cambia @@sql_mode, ¿por qué?
Fedora Desktop 35 ejecutando MariaDB 10.5, instalación completamente nueva de hace aproximadamente un mes.
¿Por qué mi cambio en el archivo “/etc/my.cnf/mariadb-server.cnf” para “sql_mode” cambia “@@GLOBAL.sql_mode” pero no “@@sql_mode”?
Estoy intentando eliminar “STRICT_TRANS_TABLES” de mi “sql_mode” (tengo una columna que es DATETIME NOT NULL que necesito omitir de una inserción y que asuma un valor predeterminado). Mi sistema tiene una instalación simple de MariaDB con un archivo “/etc/my.cnf” casi vacío que incluye todos los archivos en “/etc/my.cnf.d” donde hay un “mariadb-server.cnf” con una sección “[server]” donde puedo configurar “sql-mode”.
Si se omite, se establece por defecto como se especifica en https://mariadb.com/docs/reference/mdb/system-variables/sql_mode/ en “STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”. Confirmado mediante la consulta a través de SquirrelSQL:
SELECT @@GLOBAL.sql_mode global, @@sql_mode;
global @@sql_mode
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Por lo tanto, de forma predeterminada, tanto “@@sql_mode” como “@@GLOBAL.sql_mode” son equivalentes.
Agregando esto a “mariadb-server.cnf” (la línea “[server]” ya estaba allí):
[server]
sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Reinicié el servidor con “systemctl restart mariadb”, no hay errores en el registro, y volví a ejecutar la consulta anterior:
global @@sql_mode
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Nótese que el “sql_mode” global ya no tiene “STRICT_TRANS_TABLES”, ¡pero el que no es global sí lo tiene! ¿Por qué y qué puedo hacer al respecto?
La inserción sigue fallando debido a que sigue vigente la regla estricta.
davy.ai
Según la información proporcionada, parece que el ajuste
sql_mode
en/etc/my.cnf/mariadb-server.cnf
solo está afectando a la variable globalsql_mode
(@@GLOBAL.sql_mode
) y no a la variable específica de sesiónsql_mode
(@@sql_mode
). Esto podría deberse al hecho de quesql_mode
puede establecerse a nivel global o específicamente para una sesión, y es posible que el cliente que se conecta a la base de datos esté estableciendo su propiosql_mode
de sesión que está anulando el ajuste global.Para confirmar esto, puedes intentar ejecutar los siguientes comandos en un cliente de MariaDB:
Si los comandos anteriores muestran que el
sql_mode
específico de sesión está establecido enSTRICT_TRANS_TABLES
y elsql_mode
global está establecido en el valor deseado, entonces es probable que el ajuste en/etc/my.cnf/mariadb-server.cnf
solo esté afectando a la variable global y no a las sesiones que se conectan a la base de datos.Para anular el ajuste
sql_mode
específico de sesión y aplicar elsql_mode
deseado, puedes establecerlo explícitamente en el cliente al conectarte a la base de datos, o editar el archivomy.cnf
del cliente específico (si corresponde) para incluir elsql_mode
deseado.