Estoy tratando de configurar sql_mode en mysql pero arroja un error.
Mando:
set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'
¿No es esta la forma correcta de configurar varios modos? ¿Cuáles son las ventajas de configurar los modos de sesión y globales? cual es el preferido? Tengo diferentes usuarios que intentan actualizar la base de datos con diferentes valores de UNC e insistieron en configurar el modo de sesión en 'NO_BACKSLASH_ESCAPES', pensé que tendría sentido establecer un modo gloabl para esto. ¿Esto tiene sentido?
Por favor hagamelo saber.
Gracias.
Respuestas:
Por cierto, si configura globales en MySQL:
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
Esto no lo configurará PERMANENTEMENTE y se revertirá después de cada reinicio.
Por lo tanto, debe establecer esto en su archivo de configuración (por ejemplo,
/etc/mysql/my.cnf
en la sección [mysqld]), para que los cambios sigan vigentes después del reinicio de MySQL:Archivo de configuración: /etc/mysql/my.cnf
ACTUALIZACIÓN: Las versiones más nuevas de Mysql (por ejemplo, 5.7.8 o superior) pueden requerir una sintaxis ligeramente diferente:
Asegúrese de que haya un guión entre
sql-mode
no un guión bajo y que los modos estén entre comillas dobles.Siempre consulte los documentos de MySQL de su versión para ver las opciones del modo sql .
fuente
5.7.20
y para el caso demysql.ini
, usar un guión bajo y olvidar las comillas funciona bien, así:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Lo resolví.
el modo correcto es:
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
fuente
Configurando el modo sql permanentemente usando el archivo de configuración mysql.
En mi caso, tengo que cambiar el archivo
/etc/mysql/mysql.conf.d/mysqld.cnf
comomysql.conf.d
está incluido en/etc/mysql/my.cnf
. cambio esto en [mysqld]acaba de eliminar el
ONLY_FULL_GROUP_BY
modo sql porque estaba causando problemas.Estoy usando
ubuntu 16.04
,php 7
y mysql --version dame estomysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
Después de este cambio, ejecute los siguientes comandos
sudo service mysql stop sudo service mysql start
Ahora verifique los modos SQL con esta consulta
SELECT @@sql_mode
y debería obtener los modos que acaba de configurar.fuente
Copiar en archivo de configuración:
/etc/mysql/my.cnf OR /bin/mysql/my.ini
MySQL
reiniciar.O también puedes hacer
MySQL
reiniciar.fuente
sql_mode
lugar desql-mode
.Para alguien que busque en Google este error para MySQL 8.
MySQL 8.0.11 elimina el 'NO_AUTO_CREATE_USER' del modo sql.
Tomado de aqui
Entonces, tu
sql_mode
puedes ser así:O si está usando Docker, puede agregar el siguiente comando a docker-compose.yml
mysql: image: mysql:8.0.13 command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ports: - 13306:${MYSQL_PORT}
fuente
Para cambios temporales, use el siguiente comando
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Para un cambio permanente: vaya al archivo de configuración /etc/my.cnf o /etc/mysql/mysql.conf.d/mysqld.cnf y agregue las siguientes líneas y luego reinicie el servicio mysql
fuente
Acceda a la base de datos como usuario administrador (tal vez root).
Verificar SQL_mode actual
mysql> SELECT @@sql_mode;
Para establecer un nuevo sql_mode, salga de la base de datos, cree un archivo
con su contenido sql_mode
Reiniciar Mysql
mysql> sudo service mysql stop mysql> sudo service mysql start
Creamos un archivo en la carpeta /etc/mysql/conf.d/ porque en el archivo de configuración principal /etc/mysql/my.cnf el comando está escrito para incluir todos los archivos de configuración de la carpeta / etc / mysql / conf. re/
fuente
En mi caso, tengo que cambiar el archivo,
/etc/mysql/mysql.conf.d/mysqld.cnf
cambie esto en [mysqld
]Pegue esta línea en la parte [
mysqld
]fuente
Acabo de tener un problema similar en el que MySQL (5.6.45) no aceptaba
sql_mode
ningún archivo de configuración.La solución fue agregarlo
init_file = /etc/mysql/mysql-init.sql
al archivo de configuración y luego ejecutarloSET GLOBAL sql_mode = '';
allí.fuente
Consulte la documentación de sql_mode
Método 1:
Verifique el valor predeterminado de sql_mode:
SELECT @@sql_mode //check current value for sql_mode SET GLOBAL sql_mode = "NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
Método 2:
Acceda a phpmyadmin para editar su
sql_mode
Reinicie el servidor después de ejecutar las cosas anteriores
fuente
En mi caso mysql y ubuntu 18.04
Lo configuré permanentemente usando este comando
Agregue la línea después de la configuración. Vea el ejemplo resaltado en la imagen a continuación.
Consulte la documentación y la referencia de los modos SQL disponibles
Espero que esto ayude :-)
fuente
Si alguien quiere configurarlo solo para la sesión actual, use el siguiente comando
set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
fuente
fuente