# I data type delle migrations in rails

**URL:** <https://www.ruby-forum.com/t/i-data-type-delle-migrations-in-rails/151515>\
**Category:** IT\
**Created:** [October 22, 2008, 11:19am UTC](https://www.ruby-forum.com/t/i-data-type-delle-migrations-in-rails/151515 "2008-10-22T11:19:45Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [October 22, 2008, 11:19am UTC](https://www.ruby-forum.com/t/i-data-type-delle-migrations-in-rails/151515/1 "2008-10-22T11:19:45Z")

</div>

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’?

---

<div class="post-metadata">

**Author:** ![mauro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/45deac/32.png) [@mauro](https://www.ruby-forum.com/u/mauro)\
**Post date:** [October 24, 2008, 4:13pm UTC](https://www.ruby-forum.com/t/i-data-type-delle-migrations-in-rails/151515/2 "2008-10-24T16:13:34Z")

</div>

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
