Knex: Set MySQL sql_mode pada koneksi knex pool

Dibuat pada 18 Apr 2016  ·  3Komentar  ·  Sumber: knex/knex

Hai,

saya ingin mengatur sql_mode menjadi NO_ENGINE_SUBSTITUTION untuk melewati default strict mode di server MySQL v5.7.x

Seseorang dapat memeriksa variabel sql_mode MySQL dengan mengetik SHOW VARIABLES LIKE 'sql_mode'; dari konsol klien MySQL.

  • Default untuk server MySQL v5.6.x
    NO_ENGINE_SUBSTITUTION
  • Default untuk server 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

Solusi saya saat ini adalah mengubah bagian mysqld di /etc/mysql/my.cnf file:
sql_mode='NO_ENGINE_SUBSTITUTION'

Saya ingin menyimpannya di tingkat aplikasi web daripada di tingkat server DB. Setiap saran dihargai.

Terima kasih!

question

Komentar yang paling membantu

Hai @ rhys-vdw,

Saya tidak tahu apakah ini cara resmi untuk mencapai hasil yang disebutkan di atas, namun mengesampingkan fungsi afterCreate di bagian pool dari pengaturan koneksi melakukan trik untuk saya. Berikut sumbernya:

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

Salam Hormat,
Luca

Semua 3 komentar

Hai @ rhys-vdw,

Saya tidak tahu apakah ini cara resmi untuk mencapai hasil yang disebutkan di atas, namun mengesampingkan fungsi afterCreate di bagian pool dari pengaturan koneksi melakukan trik untuk saya. Berikut sumbernya:

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

Salam Hormat,
Luca

Terima kasih @lanceschi , saya tidak menanggapi karena saya tidak tahu apa solusinya. Saya ingin tahu apakah ada baiknya menambahkan sesuatu tentang panggilan balik ini ke FAQ?

Callback didokumentasikan, ditutup

Apakah halaman ini membantu?
0 / 5 - 0 peringkat