Trả lời

17

ActiveRecord sử dụng varchar(255) (hoặc character varying (255) để là pedantic) nếu bạn không chỉ định giới hạn cụ thể. Bạn luôn có thể nhảy vào PostgreSQL với psql và nói \d your_table để nhận bảng khi PostgreSQL nhìn thấy nó.

Tôi không nghĩ mặc định được quy định ở bất cứ đâu nhưng nó là right here in the source:

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

Điều gần gũi nhất với một đặc điểm kỹ thuật là trong Migrations Guide:

Những điều này sẽ được ánh xạ vào một thích hợp loại cơ sở dữ liệu cơ sở, ví dụ với MySQL :string được ánh xạ tới VARCHAR(255).

Nhưng đó không phải về PostgreSQL và không chính xác bảo đảm.


Là một sang một bên, nếu bạn đang sử dụng PostgreSQL, bạn nên hầu như luôn luôn đi thẳng đến :text và giả vờ rằng :string không tồn tại. PostgreSQL xử lý chúng giống nhau, ngoại trừ việc phải kiểm tra độ dài trên varchar. Có một cuộc thảo luận nhiều hơn về điều này ở đây trong một câu trả lời khác của tôi: Changing a column type to longer strings in rails.

+0

câu trả lời hữu ích đặc biệt, cảm ơn bạn! – jpwynn

7

Trong ray 4 không có giới hạn mặc định cho loại hình chuỗi như bạn có thể nhìn thấy trong source:

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

nếu bạn không chỉ định một giới hạn ActiveRecord sẽ chỉ cần đặt character varying và bạn có thể lưu trữ có một chuỗi của bất kỳ chiều dài như đã nêu trong documentation:

Nếu nhân vật khác nhau được sử dụng mà không cần chiều dài specifier, loại chấp nhận chuỗi kích thước bất kỳ