sql_mode remove permanently only_full_group_by off no_zero_date no_auto_value_on_zero modo estricto enabled disable desactivar check mysql ruby-on-rails ruby-on-rails-4 database-connection strict

mysql - off - remove only_full_group_by permanently



Cómo desactivar el modo estricto de MySQL en Rails (6)

Al actualizar a Rails 4, parece que el modo estricto de MySQL ahora está activado de forma predeterminada para las conexiones de Rails. Digo esto porque mi aplicación Rails está obteniendo "Mysql2 :: Error: Datos demasiado largos para la columna" al guardar un valor de cadena de más de 255 caracteres. Sin embargo, pego la misma consulta en la consola de MySQL (donde se informa que el modo estricto global está desactivado) y funciona bien, solo con advertencias de truncamiento. Como evidencia adicional, dice aquí: "Los rieles 4 usan el modo estricto por defecto".

Mi pregunta es ¿cómo puedo desactivar el modo estricto desde la aplicación Rails? Prefiero evitar actualizar todo para admitirlo ahora.


La gema mysql2 expone una opción para ejecutar un comando inicial al conectarse y reconectarse . Puedes configurar el init_command desde el interior database.yml :

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


La respuesta de @arya podría no funcionar porque ''traditional'' modo sql ''traditional'' es estricto. Si desea configurarlo como no estricto, intente esto:

sql_mode: ''''

Espero que ayude



Siguiendo la respuesta de @edubriguenti, encontré esto . Aplicando la publicación y el comentario allí, agregué lo siguiente a environment.rb y parece haber resuelto el problema.

# 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!


Prueba esto:

# 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