【问题标题】:Rails change column to mediumtextRails 将列更改为中文本
【发布时间】:2012-03-12 16:22:37
【问题描述】:

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

【问题讨论】:

  • 拥有一个“太大”的领域真的会是世界末日吗?开销是每行两个字节的绝对最大值。
  • 不是。我只是想进一步了解 Rails 如何处理这个问题。
  • 如果您可以更具体地了解您想要什么、您得到什么以及您是如何获得的,那么诊断问题会更容易。

标签: mysql ruby-on-rails migration


【解决方案1】:

看到这个答案:'Rails 3 Migration with longtext'

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

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

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

因此,如果您对 :text 类型列设置了限制,Rails 将自动选择可以容纳该值的最小类型,将您输入的限制值静默四舍五入到上述四个限制之一。

例子:

t.text :example_text_field, limit: 20

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

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

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

更新

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

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

【讨论】:

  • 也可以使用limit: 16.megabytes- 1
  • @nurettin 我编辑了这个问题,因为对于 mediumtext 我需要输入limit: 16.megabytes - 1
  • 仅供参考,如果您将列设置为LONGTEXTlimit 的值是多少?
  • 我相信会是change_column :example_table, :example_text_field, :text, limit: 4.gigabytes - 1
【解决方案2】:
change_column :example_table, :example_text_field, :mediumtext

例子:

def change
   change_column :users, :bio, :mediumtext
end

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多