Comment désactiver le mode strict MySQL dans les Rails
Upgrading to Rails 4, il semble que le mode strict MySQL est maintenant activé par défaut pour les connexions Rails. Je dis cela parce que mon application de Rails obtient "Mysql2::Error: Data too long for column" (erreur Mysql2:: données trop longues pour la colonne) en sauvegardant une valeur de chaîne de caractères de plus de 255 caractères. Pourtant, je colle la même requête dans la console MySQL (où le mode Global strict est désactivé) et ça marche très bien, juste avec des avertissements de troncature. Comme preuve supplémentaire,il est dit ici<!-Les Rails 4 utilisent tous les deux le mode strict par défaut."
ma question Est Comment puis-je désactiver le mode strict de L'application Rails? Je préfère éviter de tout mettre à jour pour le supporter maintenant.
6 réponses
Vous pouvez définir le mode strict dans votre base de données.yml à l'aide de strict: false
comme suit:
production:
host: ...
username: ...
strict: false
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html
vous pouvez ajouter ceci à votre base de données.yml
variables: sql_mode: 'traditional'
ou
variables: strict_mode: false
Voir:
suite à la réponse de @edubriguenti,j'ai trouvé ce. L'application de la poste et le commentaire, j'ai ajouté ce qui suit à environment.rb
et il semble avoir résolu le problème.
# 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!
mysql2
gem expose une option pour exécuter un commande initiale de connexion et de reconnexion. Vous pouvez définir l' init_command
à partir de database.yml
:
production:
host: ...
username: ...
init_command: "SET @@SESSION.sql_mode = ''"
sql_mode: ''
Hope qui aide
essaye ceci:
# 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