2008-10-02 6 views
0

Je reçois une erreur de MySQL:erreur Mise à jour d'un enregistrement

#update (ActiveRecord :: StatementInvalid) « Mysql :: Erreur: # erreur HY000Got 139 du moteur de stockage:

Lorsque vous essayez de mettre à jour un champ de texte sur un enregistrement avec une chaîne de longueur 1429 caractères, des idées sur la façon de traquer le problème?

Ci-dessous le stacktrace.

from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:147:in `log' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:299:in `execute' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:167:in `update_sql' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:314:in `update_sql' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:49:in `update_without_query_dirty' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:19:in `update' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/base.rb:2481:in `update_without_lock' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/locking/optimistic.rb:70:in `update_without_dirty' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/dirty.rb:137:in `update_without_callbacks' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/callbacks.rb:234:in `update_without_timestamps' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/timestamp.rb:38:in `update' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/base.rb:2472:in `create_or_update_without_callbacks' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/callbacks.rb:207:in `create_or_update' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/base.rb:2200:in `save_without_validation' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/validations.rb:901:in `save_without_dirty' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/dirty.rb:75:in `save_without_transactions' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/transactions.rb:106:in `save' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in `transaction' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/transactions.rb:79:in `transaction' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/transactions.rb:98:in `transaction' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/transactions.rb:106:in `save' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/transactions.rb:118:in `rollback_active_record_state!' 
from /var/www/releases/20081002155111/vendor/rails/activerecord/lib/active_record/transactions.rb:106:in `save' 
+0

Quel est le type de colonne que vous essayez de mettre à jour? – mwilliams

+0

Ouais, j'ai peu plus de détails aiderait probablement! –

+0

C'est une colonne de texte dans mysql, pour être honnête si l'erreur n'était pas si énigmatique que j'aurais pu résoudre celle-ci moi-même maintenant. La table peut être corrompue ou quelque chose, car elle affecte seulement un enregistrement dans la table. – MatthewFord

Répondre

0

Peut-être que c'est ce bug: #1030 - Got error 139 from storage engine, mais il serait utile si vous publiez la requête qui devrait venir directement après le message d'erreur.

+0

La requête n'est pas enregistrée dans le terminal, recherche les journaux mysql. Et en ce qui concerne le ticket mysql, je ne fais que mettre à jour un champ de texte avec une chaîne de longueur 1429, sûrement il peut gérer ça (n'est-ce pas?!)? – MatthewFord

+0

La requête doit être dans logs/development.log –

+0

L'application est en production et les journaux affichent simplement la trace de la pile ci-dessus. Je ne peux pas dupliquer le problème en développement – MatthewFord

0

Il semblait être une erreur mysql très étrange, où le texte a été tronqué à 256 caractères (pour un type de texte) et en jetant l'erreur ci-dessus est la chaîne était de 1000 caractères ou plus. modification de la colonne de la table pour être à nouveau le problème de texte, ou il a juste fixé lui-même .. je ne suis toujours pas sûr.

Mise à jour: Modification du type de table à MyISAM fixe ce problème

1

Quand vous dites un champ de texte, est-il de type VARCHAR, ou TEXT?

Si c'est le premier, vous ne pouvez pas stocker dans cette colonne une chaîne plus grande que 255 caractères (peut-être moins avec le préfixe UTF-8). Si c'est le dernier, vous devriez poster votre définition de schéma afin que les gens puissent vous aider davantage.

Questions connexes