【问题标题】:How to store long text to MySql DB using Rails?如何使用 Rails 将长文本存储到 MySql DB?
【发布时间】:2011-07-26 13:12:49
【问题描述】:

我正在尝试将长文本(在我的情况下是原始 rss 提要,但也可以是长博客文章或类似内容)存储到 MySql 数据库。

我有一个迁移:

change_column :contents, :description, :longtext

但这给出了一个 schema.rb:

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

实际上应该将限制设置为 4294967295。

为什么 Rails 规定一个上限是应该可能的一半?

【问题讨论】:

    标签: mysql ruby-on-rails text


    【解决方案1】:

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

    那么正确的做法是:

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

    请记住,使用多字节字符时,有效的最大大小会更小。

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

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

    【讨论】:

    • 谢谢!你所说的有效大小和rails utf-8默认编码很有意义。
    猜你喜欢
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多