字符串vs文本使用Rails 3.2。*和Postgres - 我应该总是只使用文本

时间:2015-06-26 18:27:30

标签: ruby-on-rails string postgresql rails-activerecord

我采用了一个Rails应用程序(Rails 3.2和Postgres 9.4),它有一些Rails字符串,我们已超过255限制。这个应用程序以前使用MySQL而不是Postgres作为后备存储。我的理解是postgres处理字符串和文本相同。它是否正确?在将所有Rails字符串迁移到文本之前,我们应该注意哪些限制?

性能问题是一个值得关注的问题,但不是主要问题。

1 个答案:

答案 0 :(得分:8)

来自fine manual

  

提示:这三种类型之间没有任何性能差异,除了使用空白填充类型时存储空间增加,还有一些额外的CPU周期来检查存储长度时的长度 - 受限制的列。虽然character(n)在其他一些数据库系统中具有性能优势,但PostgreSQL中没有这样的优势;实际上character(n)通常是三者中最慢的,因为它增加了存储成本。在大多数情况下,应该使用textcharacter varying

他们所谈论的三种类型是char(n)varchar(n)text。提示基本上是这样说的:

    由于空白填充并且必须检查长度约束,
  • char(n)是最慢的。
  • varchar(n)通常位于中间,因为需要检查长度约束。
  • text(AKA varchar没有n)通常是最快的,因为没有额外的开销。

除了char(n)的空白填充以及char(n)varchar(n)的长度检查外,他们在幕后都处理相同的内容。

使用ActiveRecord,t.stringvarchart.texttext。如果您对字符串没有任何硬性限制,那么只需将t.text与PostgreSQL一起使用即可。