rails 3 / postgres – 如果不应用,则为字符串多长时间:模式中的限制

我的googlefu必须是弱的,因为我找不到任何东西来告诉我Rails应用程序中的字符串列的默认限制(在Heroku上托管,使用PostgreSQL作为数据库)。

任何帮助,将不胜感激!

如果您没有指定特定限制,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中将列类型更改为更长的字符串

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

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

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

如果在没有长度说明符的情况下使用字符变化,则该类型接受任何大小的字符串