I data type delle migrations in rails


#1

Mi pare di capire che i data type delle migrations non hanno una
corrispondeza stretta con i data type dei vari dbms no?
Per esempio il tipo string non esiste ne in mysql ne in postgres, semmai
c’e’ il tipo varchar.
E’ cosi’?


#2

Mauro wrote:

Mi pare di capire che i data type delle migrations non hanno una
corrispondeza stretta con i data type dei vari dbms no?
Per esempio il tipo string non esiste ne in mysql ne in postgres, semmai
c’e’ il tipo varchar.
E’ cosi’?

E’ così. Il varchar (altresì detto character varying) però ha un limite
di lunghezza. Per stringhe illimitate c’è un altro tipo di dati, il
text.

Il dettaglio della corrispondenza tra tipi ruby e tipi del db è nel
metodo native_database_types della classe che fa da adapter ai diversi
database. Trovi i file degli adapter nella directory
lib/active_record/connection_adapters dentro a quella della gemma
activerecord.

Ti riporto quelli mySQL (il primo) e quelli PostgreSQL

  def native_database_types #:nodoc:
    {
      :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY 

KEY",
:string => { :name => “varchar”, :limit => 255 },
:text => { :name => “text” },
:integer => { :name => “int”, :limit => 11 },
:float => { :name => “float” },
:decimal => { :name => “decimal” },
:datetime => { :name => “datetime” },
:timestamp => { :name => “datetime” },
:time => { :name => “time” },
:date => { :name => “date” },
:binary => { :name => “blob” },
:boolean => { :name => “tinyint”, :limit => 1 }
}
end

  def native_database_types #:nodoc:
    {
      :primary_key => "serial primary key",
      :string      => { :name => "character varying", :limit => 255 

},
:text => { :name => “text” },
:integer => { :name => “integer” },
:float => { :name => “float” },
:decimal => { :name => “decimal” },
:datetime => { :name => “timestamp” },
:timestamp => { :name => “timestamp” },
:time => { :name => “time” },
:date => { :name => “date” },
:binary => { :name => “bytea” },
:boolean => { :name => “boolean” }
}
end

Paolo