Knex: Установите MySQL sql_mode при подключении к пулу knex

Созданный на 18 апр. 2016  ·  3Комментарии  ·  Источник: knex/knex

Привет,

Я хотел бы установить sql_mode на NO_ENGINE_SUBSTITUTION , чтобы обойти значение по умолчанию strict mode на сервере MySQL v5.7.x

Можно проверить переменную MySQL sql_mode набрав SHOW VARIABLES LIKE 'sql_mode'; клиентской консоли MySQL.

  • По умолчанию для сервера MySQL v5.6.x
    NO_ENGINE_SUBSTITUTION
  • По умолчанию для сервера 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

Мой текущий обходной путь состоял в том, чтобы изменить раздел mysqld в файле /etc/mysql/my.cnf :
sql_mode='NO_ENGINE_SUBSTITUTION'

Я бы хотел, чтобы это было на уровне веб-приложений, а не на уровне сервера БД. Любые советы приветствуются.

Спасибо!

question

Самый полезный комментарий

Привет @ rhys-vdw,

Я не знаю, является ли это официальным способом достижения вышеупомянутого результата, тем не менее, переопределение функции afterCreate в разделе pool в настройках подключения помогает мне. Вот источник:

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

С наилучшими пожеланиями,
Лука

Все 3 Комментарий

Привет @ rhys-vdw,

Я не знаю, является ли это официальным способом достижения вышеупомянутого результата, тем не менее, переопределение функции afterCreate в разделе pool в настройках подключения помогает мне. Вот источник:

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

С наилучшими пожеланиями,
Лука

Спасибо @lanceschi , я не ответил, потому что понятия не имел, в чем состоит решение. Интересно, стоит ли добавить что-нибудь об этом обратном вызове в FAQ?

Обратный звонок задокументирован, закрытие

Была ли эта страница полезной?
0 / 5 - 0 рейтинги