如何使用Rails将长文本存储到MySql DB?

时间:2011-07-26 13:12:50

标签: mysql ruby-on-rails text

我正在尝试将一个长文本(在我的情况下是一个原始的RSS源,但也可能是一篇很长的博客文章或类似文件)存储到MySql数据库。

我有一个迁移:

change_column :contents, :description, :longtext

但是这给出了一个schema.rb:

t.text     "description",       :limit => 2147483647

当限制实际上已设定为4294967295时。

为什么Rails施加的上限是应该可能的一半?

1 个答案:

答案 0 :(得分:15)

我不知道是否支持rails:在以前版本中正式使用longtext,但在根据rails documentation的当前版本中:longtext实际上未指定为合法数据类型。我认为这只是mysql适配器的一个便利,它将其转换为:text。

正确的方法是:

change_column:contents,:description,:text,:limit => 4294967295

请注意,使用多字节字符时,有效最大大小会减少。

编辑:考虑一下这个问题,将轨道尺寸缩小一半是有意义的。重新阅读有关此主题的mysql docs,他们会谈到有效大小。我想在填充2字节UTF-8字符时,指定2147483647可能会导致有效大小为4294967295。由于UTF-8是ruby 1.9中的默认编码(至少在我的机器上),因此它是唯一正确的方法。我想?!

ruby-1.9.2-p136 :002 > "".encoding
=> #<Encoding:UTF-8>