Szukam więcej niż prostego wpisu typu, który można znaleźć na tej stronie :
: primary_key,: string,: text,: integer,: float,: decimal,: datetime,: timestamp,: time,: date,: binary,: boolean
Ale czy jest jakaś dokumentacja, która faktycznie definiuje te pola?
Konkretnie:
- Jaka jest różnica między
:string
i:text
? - Pomiędzy
:float
a:decimal
? - Jakie są cechy wyróżniające
:time
,:timestamp
i:datetime
?
Czy niuanse tego typu są gdziekolwiek udokumentowane?
EDYCJA: Punkty implementacji platformy DB nie mają znaczenia dla pytania, które próbuję zadać. Jeśli, powiedzmy, :datetime
nie ma zdefiniowanego zamierzonego znaczenia w dokumentacji Railsów, to po co piszą db-adapter-writer przy wyborze odpowiedniego typu kolumny?
ruby-on-rails
Grant Birchmeier
źródło
źródło
:string
i:text
nie mogłem znaleźć innego niż to. Zastanawiałem się więc, czy nie w przyszłości.Odpowiedzi:
Wytyczne zbudowane na podstawie osobistego doświadczenia:
serial primary key
W postgreSQL). Jego użycie jest nieco skomplikowane i nie jest zalecane.validates_uniqueness_of
iadd_index
z:unique => true
opcją), aby symulować funkcjonalność klucza podstawowego w jednym z twoich własnych pól.Są to typy, w których często istnieje zamieszanie; Mam nadzieję, że to pomoże. Naprawdę nie wiem, dlaczego nie ma oficjalnej dokumentacji na ich temat. Wyobrażam sobie również, że wspomniane przez ciebie adaptery baz danych zostały napisane przez te same osoby, które napisały Railsy, więc prawdopodobnie nie potrzebowały żadnej dokumentacji, kiedy pisały adaptery. Mam nadzieję że to pomoże!
Uwaga: obecność obu
:DateTime
i:Timestamp
, z tego, co mogę znaleźć, jest uwzględniona przez Rails głównie ze względu na kompatybilność z systemami baz danych. Na przykładTIMESTAMP
typ danych MySQL jest przechowywany jako uniksowy znacznik czasu. Jego prawidłowy zakres wynosi od 1970 do 2038 roku, a czas jest przechowywany jako liczba sekund, które upłynęły od ostatniej epoki , co jest podobno standardowe, ale w praktyce może różnić się w zależności od systemu. Uznając, że względny czas nie był dobry w bazach danych, MySQL wprowadził późniejDATETIME
typ danych, który przechowuje każdą cyfrę w roku, miesiącu, dniu, godzinie, minucie i sekundzie, kosztem zwiększenia rozmiaru. TheTIMESTAMP
typ danych został zachowany dla kompatybilności wstecznej. Inne systemy baz danych przeszły podobne zmiany. Railsy uznały istnienie wielu standardów i zapewniły interfejsy do obu. Jednak Rails ActiveRecord domyślnie ustawia zarówno daty, jak:Timestamp
i:DateTime
daty UTC przechowywane w MySqlDATETIME
, więc nie ma to żadnej różnicy funkcjonalnej dla programistów Rails. Istnieją one po to, aby użytkownicy, którzy chcą rozróżnić między nimi, mogą to zrobić. (Aby uzyskać bardziej szczegółowe wyjaśnienie, zobacz tę odpowiedź SO).źródło
Z kodu źródłowego gałęzi Rails master znalazłem:
streszczenie mysql_adapter
super
wtype_to_sql
metodzieźródło