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

Mag*_*gne 15 mysql text ruby-on-rails

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

我有一个迁移:

change_column :contents, :description, :longtext
Run Code Online (Sandbox Code Playgroud)

但这给出了一个schema.rb:

t.text     "description",       :limit => 2147483647
Run Code Online (Sandbox Code Playgroud)

当限制实际上应该设置为4294967295.

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

Pau*_*ska 15

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

那么正确的方法是:

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

请记住,使用多字节字符时,有效最大大小会减少.

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

ruby-1.9.2-p136 :002 > "".encoding
=> #<Encoding:UTF-8> 
Run Code Online (Sandbox Code Playgroud)