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
Puede agregar esto a su database.yml
variables: sql_mode: ''traditional''
o
variables: strict_mode: false
Ver:
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
Puede establecer el modo estricto en su database.yml usando strict: false
siguiente manera:
production:
host: ...
username: ...
strict: false
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html