我正在尝试将一个很长的文本(在我的例子中是一个原始的rss,但也可以是一个很长的博客文章或类似内容)存储到一个MySql数据库中。
我使用以下工具进行迁移:
change_column :contents, :description, :longtext但这会给出一个包含以下内容的schema.rb:
t.text "description", :limit => 2147483647而实际上应该将限制设置为4294967295。
为什么Rails施加的上限是应该达到的上限的一半?
发布于 2011-07-26 21:23:15
我不知道rails在以前的版本中是否支持:longtext,但是根据rails documentation的说法,在当前版本中,:longtext实际上没有被指定为合法的数据类型。我认为这只是mysql适配器将其转换为:text的便利。
正确的做法是:
change_column :contents,:description,:text,:limit => 4294967295
请记住,使用多字节字符时,有效的最大大小较小。
rails编辑:仔细考虑了一下,认为rails将大小减半是有道理的。重新阅读关于这个主题的mysql docs,他们谈到了有效大小。我猜指定2147483647可能会导致填充2字节UTF-8字符时的有效大小为4294967295。由于UTF-8是Ruby1.9中的默认编码(至少在我的机器上是这样),因此这是唯一正确的方法。我想?!
ruby-1.9.2-p136 :002 > "".encoding
=> #<Encoding:UTF-8> https://stackoverflow.com/questions/6830522
复制相似问题