2010-02-23 57 views
30

Estoy tratando de establecer sql_mode en mysql pero arroja un error.configuración global sql_mode en mysql

Comando:

set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION' 

No es ésta la forma correcta de establecer múltiples modos? ¿Cuáles son las ventajas de configurar la sesión y los modos globales? que es preffered? Tengo diferentes usuarios tratando de actualizar la base de datos con diferentes valores UNC y estoy interesado en configurar el modo de sesión como 'NO_BACKSLASH_ESCAPES', aunque creo que tendría sentido crear un modo gloabl para esto. ¿Esto tiene sentido?

Háganme saber.

Gracias.

+0

Esas cotizaciones errantes me molesta; p. Como otros dijeron que estoy seguro, definitivamente esto no es correcto solo por eso. –

Respuesta

15

Lo resolví.

el modo correcto es:

set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
+8

ADVERTENCIA: En nuestra experiencia, esto no conserva la configuración después de un reinicio de MySQL ... –

+0

Sí, esto no conserva la configuración después de reiniciar – PRP

+2

Para retenerlo después de reiniciar para Unix, tuve que crear un archivo ~/.my.cnf y agregar [mysqld] sql_mode = "". Espero que esto ayude –

82

Por cierto, si establece las variables globales en MySQL:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; 
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION'; 

esto no va a configurarlo PERMANENTEMENTE, y va a volver después de cada reinicio.

lo que debe establecer esto en su archivo de configuración (por ejemplo /etc/mysql/my.cnf en la sección [mysqld]), de modo que los cambios se mantienen en vigor después de un reinicio de MySQL: Archivo

Config:/etc/mysql/mi .cnf

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

UPDATE: Las nuevas versiones de MySQL (por ejemplo, 5.7.8 o superior) puede requerir ligeramente diferente sintaxis:

[mysqld] 
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" 

Asegúrate de que haya un guión entre sql-moden, no un guión bajo, y que los modos estén entre comillas dobles.

la referencia siempre el MySQL Docs para su versión para ver el sql-mode options.

+0

Gracias, establecer en mi.cnf hizo el truco para mí. Para aquellos interesados, esta página le dice cuáles son los sql_modes predeterminados en 5.7 y más arriba: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html – Richard

+0

5.7 note note up! Ese fue el problema. –

+0

Es trabajos. Gracias –

7

Copiar al archivo de configuración: /etc/mysql/my.cnf OR /bin/mysql/my.ini

[mysqld] 
port = 3306 
sql-mode="" 

MySQL reinicio.

O también se puede hacer

[mysqld] 
port = 3306 
SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 

MySQL reinicio.

+2

Creo que es' sql_mode' en lugar de ' sql-mode'. –

+0

ambos se pueden usar –

+0

@RamanSahasi depende de qué versión. –

9

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 como mysql.conf.d está incluido en /etc/mysql/my.cnf.i cambiar esto bajo [mysqld]

[mysqld] 
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

modo ONLY_FULL_GROUP_BY sql simplemente eliminado causa que estaba causando cuestión.

estoy usando ubuntu 16.04, php 7 y mysql --version dame esta mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

Después de ejecutar este cambio por debajo de los comandos

sudo service mysql stop 
sudo service mysql start 

Ahora compruebe modos SQL de esta consulta SELECT @@sql_mode y usted debe obtener los modos que usted acaba de establecer.

1

En mi caso tengo que cambiar el archivo /etc/mysql/mysql.conf.d/mysqld.cnf cambiar esto bajo [mysqld]

Pegar esta línea de [mysqld] porción

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
Cuestiones relacionadas