Как отключить строгий режим MySQL в Rails

Обновление до Rails 4, похоже, теперь строгий режим MySQL включен по умолчанию для соединений Rails. Я говорю об этом, потому что мое приложение Rails получает "Mysql2:: Error: Data too long for column" при сохранении строкового значения длиной более 255 символов. Тем не менее, я вставляю тот же запрос в консоль MySQL (где отключен глобальный строгий режим), и он отлично работает, только с предупреждениями об усечении. В качестве еще одного доказательства, он говорит здесь "Rails 4 используют строгий режим по умолчанию".

Мой вопрос: как я могу отключить строгий режим из приложения Rails? Я бы предпочел не обновлять все, чтобы поддерживать его прямо сейчас.

Ответ 2

После ответа @edubriguenti Я нашел это. Применяя сообщение и комментарий там, я добавил следующее к environment.rb и, похоже, решил проблему.

# Set MySQL to clear sql mode for all connections
class ActiveRecord::ConnectionAdapters::Mysql2Adapter 
  alias :connect_no_sql_mode :connect
  def connect
    connect_no_sql_mode
    execute("SET sql_mode = ''")
  end
end

ActiveRecord::Base.connection.reconnect!

Ответ 3

Вы можете добавить это в свой database.yml

variables:
   sql_mode: 'traditional'

или

variables:
   strict_mode: false

См:

https://github.com/rails/rails/pull/8346

Ответ 4

Ответ @arya может не работать, потому что 'traditional' режим sql строгий, если вы хотите установить его нестрогим, попробуйте следующее:

sql_mode: ''

Надеюсь, что поможет

Ответ 5

Попробуйте следующее:

# Set MySQL to clear sql mode for all connections
class ActiveRecord::ConnectionAdapters::MysqlAdapter 
  alias :connect_no_sql_mode :connect
  def connect
    connect_no_sql_mode
    execute("SET sql_mode = ''")
  end
end

Ответ 6

Драгоценность mysql2 предоставляет возможность выполнить начальную команду для подключения и повторного подключения. Вы можете установить init_command изнутри database.yml:

production:
  host: ...
  username: ...
  init_command: "SET @@SESSION.sql_mode = ''"