Rails将列更改为mediumtext

时间:2012-03-12 16:22:37

标签: mysql ruby-on-rails migration

我需要将TEXT类型的列更改为MEDIUMTEXT。根据这个讨论:How to store long text to MySql DB using Rails?,我需要将大小限制指定为MySQL中特定TEXT类型的允许范围的一半。然而,我所经历的是,即使减半,我仍然得到比我需要的水平高一级的类型。有没有人有更好的文档记录或知道为什么会发生这种情况?谢谢!

2 个答案:

答案 0 :(得分:41)

请参阅此答案:'Rails 3 Migration with longtext'

您输入的限制值被忽略的原因是MySQL的工作原理。它有四种文本类型,每种类型都有自己的大小限制:

  • TINYTEXT - 256字节
  • TEXT - 65,535字节
  • MEDIUMTEXT - 16,777,215字节
  • LONGTEXT - 4,294,967,295字节

文本列必须是这四种类型之一。您无法在MySQL中为这些类型指定自定义长度。

因此,如果您对:text type列设置了限制,Rails将自动选择能够容纳该值的那些类型中最小的类型,将您输入的限制值静默地舍入上述四个限制之一。

示例:

t.text :example_text_field, limit: 20

将生成一个限制为256字节的TINYTEXT字段,而

t.text :example_text_field, limit: 16.megabytes - 1

将生成一个MEDIUMTEXT字段,其限制为16,777,215字节。

更新

对于问题的动摇:“我需要更改列”

change_column :example_table, :example_text_field, :text, limit: 16.megabytes - 1

答案 1 :(得分:1)

change_column :example_table, :example_text_field, :mediumtext