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)