- :string - is for small data types such as a title. (Should you choose string or text?)
- :text - is for longer pieces of textual data, such as a paragraph of information
- :binary - is for storing data such as images, audio, or movies.
- :boolean - is for storing true or false values.
- :date - store only the date
- :datetime - store the date and time into a column.
- :time - is for time only
- :timestamp - for storing date and time into a column.(What's the difference between datetime and timestamp?)
- :decimal - is for decimals (example of how to use decimals).
- :float - is for decimals. Note: Never use float datatype for currency, use decimal. Basically, it stores sign, fraction and exponent to represent a float. Use float when you don't care about precision too much e.g. latitude/longitude values etc. Use decimal always, when precision is required. e.g. numbers that need to be precise and add up correctly (like compounding interest and currency related calculations)
- :integer - is for whole numbers.
- :primary_key - unique key that can uniquely identify each row in a table
There's also references used to create associations. But, I'm not sure this is an actual data type.
New Rails 4 datatypes available in PostgreSQL:
- :hstore - storing key/value pairs within a single value (learn more about this new data type)
- :array - an arrangement of numbers or strings in a particular row (learn more about it and see examples)
- :cidr_address - used for IPv4 or IPv6 host addresses
- :inet_address - used for IPv4 or IPv6 host addresses, same as cidr_address but it also accepts values with nonzero bits to the right of the netmask
- :mac_address - used for MAC host addresses
Also, here's the official guide on migrations: http://edgeguides.rubyonrails.org/migrations.html