2009-12-10 56 views
2

是否有任何指向指定在遷移字符串限制選項...正在使用列限制選項嗎?

class CreateAccounts < ActiveRecord::Migration 
    def self.up 
    create_table :accounts do |t| 
     t.string :name, :limit => 64 
    end 
    end 
end 

如果有這樣的應用到數據庫中的所有字符串?什麼意義?

回答

6

字符串通常是255個字符長度,但並不是所有的數據庫都以相同的方式處理字符串字段。例如,PostgreSQL可以創建不同大小的字符串列。

至少有2個非常充足的理由指定字符串字段的值:

  1. 跨數據庫的兼容性
  2. 數據庫性能

如果你需要一個字符串列來存儲國家代碼是2個字符的長度,爲什麼你希望數據庫保留額外的253個字符......什麼都不是?

另請注意,您應始終驗證模型中字段值的長度。 如果您嘗試創建一個紀錄,超過你的最大長度的名稱:

  1. SQLITE3會悄悄修整值
  2. MySQL會悄悄修整值
  3. PostgreSQL將拋出一個異常

所以,總是validates_length_of你的屬性。

0

首先想到的是 - 當您擁有數百萬個帳戶時,該限制實際上會影響您的數據庫的大小。