Knex: Stellen Sie MySQL sql_mode für die Knex-Pool-Verbindung ein

Erstellt am 18. Apr. 2016  ·  3Kommentare  ·  Quelle: knex/knex

Hallo,

Ich möchte sql_mode auf NO_ENGINE_SUBSTITUTION setzen, um die Standardeinstellung strict mode in MySQL Server v5.7.x zu umgehen

Sie können die Variable sql_mode MySQL überprüfen, indem Sie SHOW VARIABLES LIKE 'sql_mode'; in die MySQL-Client-Konsole eingeben.

  • Standard für MySQL Server v5.6.x.
    NO_ENGINE_SUBSTITUTION
  • Standard für MySQL Server 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

Meine aktuelle Problemumgehung bestand darin, den Abschnitt mysqld in der Datei
sql_mode='NO_ENGINE_SUBSTITUTION'

Ich möchte es jedoch eher auf der Webanwendungsebene als auf der DB-Serverebene behalten. Alle Ratschläge geschätzt.

Vielen Dank!

question

Hilfreichster Kommentar

Hi @ rhys-vdw,

Ich weiß nicht, ob dies der offizielle Weg ist, um das oben genannte Ergebnis zu erzielen. Trotzdem reicht es für mich aus, die Funktion afterCreate im Abschnitt pool der Verbindungseinstellungen zu überschreiben. Hier ist die Quelle:

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);
              });
            }
          }
        }

Freundliche Grüße,
Luca

Alle 3 Kommentare

Hi @ rhys-vdw,

Ich weiß nicht, ob dies der offizielle Weg ist, um das oben genannte Ergebnis zu erzielen. Trotzdem reicht es für mich aus, die Funktion afterCreate im Abschnitt pool der Verbindungseinstellungen zu überschreiben. Hier ist die Quelle:

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);
              });
            }
          }
        }

Freundliche Grüße,
Luca

Danke @lanceschi , ich habe nicht

Rückruf wird dokumentiert und geschlossen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

mishitpatel picture mishitpatel  ·  3Kommentare

koskimas picture koskimas  ·  3Kommentare

hyperh picture hyperh  ·  3Kommentare

npow picture npow  ·  3Kommentare

mtom55 picture mtom55  ·  3Kommentare