sql_mode = STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_

Mysql8.0 ONLY_FULL_GROUP_BY y anteriormente, así como otras causas de error en detalle acerca de las soluciones sql_mode

Rainbow Shu Dian preocupación
0,279 1.606 palabras leídas 9038

Hoy estamos hablando de la cuestión en mysql8 ONLY_FULL_GROUP_BY, creo que todos en el grupo mediante el uso de la función de repente saltar de un mensaje de error:

ERROR 1055 (42000): Expresión # 7 de lista SELECT no es en la cláusula POR GRUPO y contiene la columna no agregada 'postscan.verifyDelayLog.auditor' que no es funcionalmente dependiente de columnas en la cláusula GROUP BY; esto es withsql_mode incompatible = ONLY_FULL_GROUP_BY

En la versión mysql8.0 anteriormente, para este grupo de operaciones agregadas, si la columna en la selección, no aparece en el grupo por, entonces este SQL no es legítimo, ya que la columna no está en el grupo por la cláusula, por lo para este modo de establecer una base de datos, cuando se utiliza por grupo, debemos usar MAX (), SUM (), ANT_VALUE () esta función agregada, para completar el grupo de polimerización por operación, por lo que una vez dicho esto, cómo desactivar que?

Después de que tengamos algunas Baidu, el resultado obtenido es de aproximadamente ONLY_FULL_GROUP_BY, pero seguir el tutorial dicho, sólo modificar el my.cnf,

Adición de la siguiente my.cnf

[Mysqld]

sql_mode = 'NO_AUTO_VALUE_ON_ZERO, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION, PIPES_AS_CONCAT, ANSI_QUOTES'

El archivo de configuración añadiendo el parámetro apropiado [en adelante se denominará] para reiniciar el tiempo, es todavía muy lejos de la gente satisfactorios, incluso los que no les tutoriales a prueba práctica, para apagar, pero también traen nuevo error de MySQL, o completamente comenzará a ser dado, hoy vengo a que uno a uno con una descripción detallada de estos parámetros, y soluciones.

sql_mode variables, que fácilmente se pasa por alto, el valor predeterminado es un valor nulo, en esta disposición es permitir algunas operaciones ilegales, tales como permitir que algunos datos no válidos se inserta. Este valor se debe establecer en el modo estricto en un entorno de producción, el desarrollo, la base de datos del entorno de prueba debe ajustarse de modo que el desarrollo y fases de prueba pueden encontrar el problema.

valores comunes sql_mode son los siguientes: 

ONLY_FULL_GROUP_BY: Para GROUP BY operaciones agregadas, si una columna en el SELECT, no aparece en un GROUP BY, entonces el SQL no es legítimo, ya que la columna no está en la cláusula GROUP BY.

NO_AUTO_VALUE_ON_ZERO: El valor se inserta desde el impacto de la columna de crecimiento. En la configuración predeterminada, el inserto 0 o NULL en nombre de un valor de crecimiento autogenerado. Si desea insertar un valor de 0, y que la columna es auto-crecimiento, esta opción es muy útil.

STRICT_TRANS_TABLES: En este modo, si un valor no se puede insertar en una tabla de transacciones, interrumpiendo la operación actual, que no se limita a las tablas no transaccionales

NO_ZERO_IN_DATE: en modo estricto, no se permite que la fecha y el mes de cero

NO_ZERO_DATE: establecer el valor, la base de datos MySQL no permite la fecha cero inserción, inserción cero fechas generará un error en lugar de una advertencia.

ERROR_FOR_DIVISION_BY_ZERO: INSERT o UPDATE en el proceso, si los datos son cero, un error en lugar de una advertencia. Si no se da este modo, a continuación, devolver NULL cuando los datos MySQL cero

GRANT prohíbe a los usuarios crear una contraseña en blanco: NO_AUTO_CREATE_USER

NO_ENGINE_SUBSTITUTION: Si necesita un motor de almacenamiento está deshabilitado o no compilado, a continuación, generará un error. Cuando este valor no está establecido, la sustitución del motor de almacenamiento por defecto, y se produce una excepción

PIPES_AS_CONCAT: el operador "||" no se considera como cadenas de conexión o del operador, y que la base de datos Oracle es el mismo, así como funciones de fundido de concatenación cadena similar

ANSI_QUOTES: ANSI_QUOTES entonces se activa, no se puede utilizar para hacer referencia a una cadena de dobles comillas, porque se interpreta como un identificador

Descripción terminado la introducción, pero todavía se da en 8.0 en un entorno tal, por las siguientes razones:

ERROR 1231 (42000): Variable 'sql_mode' no se puede ajustar al valor de 'NO_AUTO_CREATE_USER'

8.0 anterior se ha cancelado palabra clave NO_AUTO_CREATE_USER, elimine la palabra clave para la declaración de sql

Por último, / etc / my.cnf archivo de configuración modificado: sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION' 

MySQL reiniciar el servicio, ya está! ~

Aquí, doy las otras dos soluciones:

El segundo enfoque, sin modificar el archivo de configuración, modificar el uso Navicat

Entrar en la interfaz de línea de comandos

Intro: SELECT @@ GLOBAL.sql_mode;

结果: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

Luego modificamos sql_mode

sql_mode conjunto global = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION';

Ejecutar el SQL, por grupo puede ser utilizado, pero este método no es una cura, tras el reinicio de MySQL, todavía no se puede utilizar el grupo por lo tanto, el primer método es el más eficaz.

Un tercer enfoque sin modificar el archivo de configuración, modificar el uso Navicat

Entrar en la interfaz de línea de comandos

Intro: SELECT @@ sql_mode; Nota: De esta manera, la sesión predeterminada, es completa: SELECT @@ SESSION.sql_mode;

结果: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

Luego modificamos sql_mode

输入: Establecer sesión de sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';

Y ejecute el SQL:

***** ***** mal o reportado ONLY_FULL_GROUP_BY

############## solución ###################

Antes de configurar sql_mode consulta comunicado

Establecer sesión de sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';

Más tarde, la nueva consulta (incluye el grupo de) los estados no establecen sql_mode juntos hasta que se cierre este sentido hasta el momento

A continuación, se ejecuta el sql no es capaz de ejecutarlo

sql_mode SET GLOBAL = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';

SELECT @@ GLOBAL.sql_mode;

Explicación de la forma 3:

1. De hecho, cuando se habla del tercer método mencionado SELECT @@ sql_mode, de hecho, aquí la sesión predeterminada, es completa: SELECT @@ SESSION.sql_mode;

2.SESSION sesión actual está destinado ----> Esto explicaría la conexión hasta que se cierre hasta

3. ¿Por qué el conjunto sql_mode línea de comandos, y luego crear una nueva consulta o inútil?

4. De hecho, sólo tiene que teclear SELECT @@ sql_mode en la nueva consulta, se encuentra que se establece en la línea de comandos y no surten efecto

5. Por lo tanto, sólo podemos más en este contexto (sesión) de la re-set sql_mode Nueva consulta, después de la conexión (esta sesión) ya no es necesario

6. En esta sección se explica el lenguaje "set antes de la declaración de su sql_mode consulta" Esta frase

2 Descripción de la forma en que los dos métodos de enfoque 3

Contenido 1. Ambos métodos conjunto sql_mode, como se reiniciará mysql en mi despliegue de Linux, mientras que vuelvo a la opción del modo SQL archivo de configuración especificado en my.cnf instalado en el interior

2. Comparar esta frase acerca

3. Medios: después del reinicio de MySQL en Linux, que ya no son válidos en conjunto Navicat, pero en base a la configuración de archivo de configuración especificado, este archivo se encuentra en my.cnf


Nota: Ahora voy a my.cnf enumerado para su referencia

3 pulgares para arriba
"Los pequeños regalos alrededor y libro de Jane a mi atención."
Agradecemos el apoyo nadie aprecia lo apoyan
Los activos totales de 18 (aproximadamente 153 millones) fueron escritos palabra 2.8W obtuvo igual que 33 de los 13 aficionados
atención
Artículos originales publicados 0 · ganado elogios 0 · Vistas 21

Supongo que te gusta

Origin blog.csdn.net/qq_45060236/article/details/105357666
Recomendado
Clasificación