包含特殊字符时,活动记录字段将被截断

时间:2012-09-07 10:26:36

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord character-encoding

当我将数据库中的字符串保存到包含特殊字符的字段时,我看到了奇怪的行为。在此示例中,“á”或“\ xE1”

因此,如果该字段为“TESTá”,则保存时保留的字段为“TEST”。

更令人担忧的是,如果该字段被验证为强制性的。我将其设置为“á”,验证通过但保存时会保存一个空字符串。使持久记录无效!

我的数据库编码是UTF-8,所以我认为这是一个编码问题。

的确,如果在控制台上我尝试了一个简单的测试,我会收到这个错误:

»“TEST \ xE1F”.encode('UTF-8')
编码:: UndefinedConversionError:“\ xE1”从ASCII-8BIT到UTF-8

那么,我应该如何正确地在rails / active record中保留特殊字符?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

将编码类型添加到您的迁移

# encoding: utf-8
class SetDefaultValues < ActiveRecord::Migration
  def up
    change_column_default(:dimensions, :unit_of_measure, "inch")
    change_column_default(:gdnts, :unit_for_tolerance, "µinch")
  end
end

也在模型中。

# encoding: utf-8
class Specifications::Specification < ActiveRecord::Base
  ...
end