Ich suche mehr als die einfache Typauflistung , die auf dieser Seite zu finden ist :
: primary_key ,: string ,: text ,: integer ,: float ,: decimal ,: datetime ,: timestamp ,: time ,: date ,: binary ,: boolean
Aber gibt es eine Dokumentation, die diese Felder tatsächlich definiert ?
Speziell:
- Was ist der Unterschied zwischen
:string
und:text
? - Zwischen
:float
und:decimal
? - Was sind die Unterscheidungsmerkmale von
:time
,:timestamp
und:datetime
?
Sind die Nuancen dieser Typen irgendwo dokumentiert?
BEARBEITEN: Punkte von DB-Plattform-Implementierungen sind für die Frage, die ich zu stellen versuche, irrelevant. Wenn beispielsweise :datetime
in der Rails-Dokumentation keine definierte beabsichtigte Bedeutung vorliegt, wie gehen dann Datenbankadapter-Writer vor, wenn sie einen entsprechenden Spaltentyp auswählen?
ruby-on-rails
Grant Birchmeier
quelle
quelle
:string
und:text
und konnte nichts anderes finden. Also habe ich mich nur gefragt, ob ich später darauf zurückgreifen kann.Antworten:
Richtlinien aus persönlicher Erfahrung:
serial primary key
in postgreSQL). Die Verwendung ist etwas kompliziert und wird nicht empfohlen.validates_uniqueness_of
undadd_index
mit der:unique => true
Option), um die Primärschlüsselfunktionalität in einem Ihrer eigenen Felder zu simulieren.Dies sind die Typen, über die häufig Verwirrung herrscht; Ich hoffe das hilft. Ich weiß wirklich nicht, warum es dazu keine offizielle Dokumentation gibt. Ich stelle mir auch vor, dass diese Datenbankadapter, auf die Sie sich bezogen haben, von denselben Personen geschrieben wurden, die Rails geschrieben haben, sodass sie beim Schreiben der Adapter wahrscheinlich keine Dokumentation benötigten. Hoffe das hilft!
Hinweis: Das Vorhandensein von beiden
:DateTime
und:Timestamp
, soweit ich das beurteilen kann, wird von Rails hauptsächlich aus Gründen der Kompatibilität mit Datenbanksystemen berücksichtigt. Beispielsweise wird derTIMESTAMP
Datentyp von MySQL als Unix-Zeitstempel gespeichert. Sein gültiger Bereich reicht von 1970 bis 2038, und die Zeit wird als die Anzahl der Sekunden gespeichert, die seit der letzten Epoche vergangen sind , was angeblich Standard ist, aber in der Praxis von System zu System unterschiedlich sein kann. MySQL erkannte, dass relative Zeit in Datenbanken nicht gut zu haben war, und führte später denDATETIME
Datentyp ein, der jede Ziffer in Jahr, Monat, Tag, Stunde, Minute und Sekunde auf Kosten einer Vergrößerung speichert. DasTIMESTAMP
Der Datentyp wurde aus Gründen der Abwärtskompatibilität beibehalten. Andere Datenbanksysteme haben ähnliche Entwicklungen durchlaufen. Rails erkannte, dass mehrere Standards vorhanden waren, und stellte Schnittstellen zu beiden bereit. Allerdings Rails Activestandardwerte sowohl:Timestamp
und:DateTime
zu UTC Daten in MySQL gespeichertDATETIME
, so macht es keinen funktionalen Unterschied zu Rails Programmierer. Diese existieren, damit Benutzer, die zwischen den beiden unterscheiden möchten , dies tun können. (Eine ausführlichere Erklärung finden Sie in dieser SO-Antwort.)quelle
Aus dem Quellcode des Rails-Hauptzweigs habe ich Folgendes gefunden:
abstrakter mysql_adapter
die
super
in-type_to_sql
Methodequelle