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
,你可以在那里存储一个任意长度的字符串,如文档中所述:
如果在没有长度说明符的情况下使用字符变化,则该类型接受任何大小的字符串