Knex: Establecer MySQL sql_mode en la conexión del grupo de knex

Creado en 18 abr. 2016  ·  3Comentarios  ·  Fuente: knex/knex

Hola,

Me gustaría establecer sql_mode en NO_ENGINE_SUBSTITUTION para omitir el strict mode predeterminado en el servidor MySQL v5.7.x

Uno puede verificar la variable sql_mode MySQL escribiendo SHOW VARIABLES LIKE 'sql_mode'; desde la consola del cliente MySQL.

  • Predeterminado para el servidor MySQL v5.6.x
    NO_ENGINE_SUBSTITUTION
  • Predeterminado para el servidor MySQL v5.7.x
    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

Mi solución actual fue modificar la sección mysqld en el archivo /etc/mysql/my.cnf :
sql_mode='NO_ENGINE_SUBSTITUTION'

Sin embargo, me gustaría mantenerlo en el nivel de la aplicación web en lugar del nivel del servidor de base de datos. Cualquier consejo apreciado.

¡Gracias!

question

Comentario más útil

Hola @ rhys-vdw,

No sé si es la forma oficial de lograr el resultado mencionado anteriormente, sin embargo, anular la función afterCreate en la sección pool de la configuración de conexión funciona. Aquí está la fuente:

dbase: {
          client: 'mysql',
          connection: {
            socketPath: '/var/run/mysqld/mysqld.sock',
            database : 'db_name',
            user: 'db_username',
            password : 'db_password',
            timezone: 'UTC',
            charset: 'utf8mb4_unicode_ci',
            supportBigNumbers:true
          },
          pool: {
            min: 2,
            max: 10,
            afterCreate: function(conn, cb) {
              conn.query('SET sql_mode="NO_ENGINE_SUBSTITUTION";', function (err) {
                cb(err, conn);
              });
            }
          }
        }

Atentamente,
Luca

Todos 3 comentarios

Hola @ rhys-vdw,

No sé si es la forma oficial de lograr el resultado mencionado anteriormente, sin embargo, anular la función afterCreate en la sección pool de la configuración de conexión funciona. Aquí está la fuente:

dbase: {
          client: 'mysql',
          connection: {
            socketPath: '/var/run/mysqld/mysqld.sock',
            database : 'db_name',
            user: 'db_username',
            password : 'db_password',
            timezone: 'UTC',
            charset: 'utf8mb4_unicode_ci',
            supportBigNumbers:true
          },
          pool: {
            min: 2,
            max: 10,
            afterCreate: function(conn, cb) {
              conn.query('SET sql_mode="NO_ENGINE_SUBSTITUTION";', function (err) {
                cb(err, conn);
              });
            }
          }
        }

Atentamente,
Luca

Gracias @lanceschi , no respondí porque no tenía idea de cuál es la solución. Me pregunto si valdría la pena agregar algo sobre esta devolución de llamada a las preguntas frecuentes.

La devolución de llamada está documentada, cerrando

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

mishitpatel picture mishitpatel  ·  3Comentarios

mtom55 picture mtom55  ·  3Comentarios

fsebbah picture fsebbah  ·  3Comentarios

rarkins picture rarkins  ·  3Comentarios

koskimas picture koskimas  ·  3Comentarios