Rails 3/PostgreSQL - 如果在模式中不应用:limit,字符串有多长?

15

我的谷歌搜索能力可能不够强,因为我无法找到任何关于Rails应用程序中字符串列的默认限制的信息(托管在Heroku上,使用PostgreSQL作为数据库)。

如果有帮助,将不胜感激!

2个回答

24

如果没有指定具体的限制,ActiveRecord会使用varchar(255)(或者更严谨地说,character varying (255))。你可以随时使用psql进入PostgreSQL并输入\d your_table来查看PostgreSQL中的表。

我不认为默认值在任何地方都有明确说明,但是在源代码这里可以找到它:

NATIVE_DATABASE_TYPES = {
  :primary_key => "serial primary key",
  :string      => { :name => "character varying", :limit => 255 },
  #...

最接近规范的是在迁移指南中:

这些将被映射到适当的底层数据库类型。例如,对于MySQL,:string会被映射为VARCHAR(255)

但这并不适用于PostgreSQL,并且也不完全是一个保证。


顺便提一下,如果您正在使用PostgreSQL,您几乎总是应该直接使用:text,并假装:string不存在。PostgreSQL 在内部将它们视为相同的,除了对varchar需要进行长度检查。关于这个问题还有更多讨论,请参阅我在另一个答案中的回答:在Rails中将列类型更改为更长的字符串


10

在Rails 4中,字符串类型没有默认的限制,您可以在源代码中看到:

NATIVE_DATABASE_TYPES = {
        primary_key: "serial primary key",
        bigserial: "bigserial",
        string:      { name: "character varying" },
        text:        { name: "text" },
        #...

如果你没有指定一个限制,ActiveRecord将只设置character varying,你可以像在文档中所述的那样存储任意长度的字符串:

如果未指定长度说明符,则使用字符变量类型接受任何大小的字符串


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接