【问题标题】:Error Updating a record更新记录时出错
【发布时间】:2010-09-14 20:53:00
【问题描述】:

我得到一个 mysql 错误:

#update (ActiveRecord::StatementInvalid) "Mysql::Error: #HY000Got error 139 from storage engine:

当尝试使用长度为 1429 个字符的字符串更新记录上的文本字段时,有什么想法可以追踪问题吗?

下面是堆栈跟踪。

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'

【问题讨论】:

  • 您要更新的列类型是什么?
  • 是的,我提供更多细节可能会有所帮助!
  • 这是 mysql 中的一个文本列,老实说,如果错误不是那么神秘,我现在可能已经自己解决了这个问题。表可能已损坏或其他原因,因为它只影响表中的一条记录。

标签: mysql ruby-on-rails ruby activerecord


【解决方案1】:

当您说文本字段时,它是 VARCHAR 类型还是 TEXT 类型?

如果是前者,那么您不能在该列中存储大于 255 个字符的字符串(使用 UTF-8 开销可能更少)。如果是后者,您最好发布您的架构定义,以便人们可以进一步帮助您。

【讨论】:

    【解决方案2】:

    也许是这个错误:#1030 - Got error 139 from storage engine,但如果您发布应该直接出现在错误消息之后的查询会有所帮助。

    【讨论】:

    • 查询没有被记录到终端,将追查mysql日志。至于 mysql 票,我只更新一个长度为 1429 的字符串的文本字段,它肯定可以处理(不能!?)?
    • 该应用程序正在生产中,日志仅显示上述堆栈跟踪。我无法在开发中复制问题
    【解决方案3】:

    这似乎是一个非常奇怪的 mysql 错误,其中文本被截断为 256 个字符(对于文本类型)并且抛出上述错误是字符串为 1000 个字符或更多。将表格列修改为文本再次解决了问题,或者它只是自己修复了它。我仍然不确定。

    更新: 将表类型更改为 MyISAM 解决了这个问题

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      相关资源
      最近更新 更多