我需要将TEXT类型的列更改为MEDIUMTEXT。根据这个讨论:How to store long text to MySql DB using Rails?,我需要将大小限制指定为MySQL中特定TEXT类型的允许范围的一半。然而,我所经历的是,即使减半,我仍然得到比我需要的水平高一级的类型。有没有人有更好的文档记录或知道为什么会发生这种情况?谢谢!
答案 0 :(得分:41)
请参阅此答案:'Rails 3 Migration with longtext'
您输入的限制值被忽略的原因是MySQL的工作原理。它有四种文本类型,每种类型都有自己的大小限制:
文本列必须是这四种类型之一。您无法在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