Ich erstelle eine neue Web-App mit Rails und habe mich gefragt, was der Unterschied zwischen string
und ist text
. Und wann sollte jeder verwendet werden?
ruby-on-rails
Mo.
quelle
quelle
:text
. Siehe depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-texttrue
in einem varchar (ergo, Typfeldstring
) in MySQL wird der Wert serialisiert1
(was völlig fair ist).text
Wenn Sie jedoch unter type den Wert "true" speichern, wird er als einzelnes Zeichen serialisiertt
. Ich habe eine Spalte migriert, ohne dies zu bemerken, und alle zukünftigen Zeilen, in denen der Wert wahr ist, sind jetztt
. Hat jemand irgendwelche Einblicke in dieses Verhalten?Wenn Sie Postgres verwenden, verwenden Sie Text, wo immer Sie können, es sei denn, Sie haben eine Größenbeschränkung, da es keine Leistungseinbußen für Text gegenüber Varchar gibt
PostsgreSQL-Handbuch
quelle
text
Over(n)
-Datentypen sind überzeugend, das Argument für die Verwendung vontext
Overvarchar
jedoch nicht. Er sagt, dass sie gleich sind, bevorzugt aber,text
weilvarchar
sie verwechselt werden könnenvarchar(n)
und weiltext
weniger Zeichen eingegeben werden müssen. Wenn Sie jedochtext
anstelle von verwendenvarchar
, verlieren Sie den Kontext, dass die gespeicherten Daten nicht lang sein sollten. Zum Beispieltext
scheint mir das Speichern eines Benutzernamens mit irreführend.String wird in Ihrer Datenbank in "Varchar" übersetzt, während Text in "Text" übersetzt wird. Ein Varchar kann weit weniger Elemente enthalten, ein Text kann (fast) beliebig lang sein.
Eine eingehende Analyse mit guten Referenzen finden Sie unter http://www.pythian.com/news/7129/text-vs-varchar/.
Bearbeiten: Einige Datenbankmodule können auf einmal geladen werden
varchar
, speichern jedoch Text (und Blob) außerhalb der Tabelle. ASELECT name, amount FROM products
könnte bei der Verwendungtext
für viel langsamer seinname
als bei der Verwendungvarchar
. Und seit Rails werden standardmäßig Datensätze mitSELECT * FROM...
Ihren Textspalten geladen. Dies wird jedoch wahrscheinlich nie ein echtes Problem in Ihrer oder meiner App sein (vorzeitige Optimierung ist ...). Aber zu wissen, dass Text nicht immer "frei" ist, ist gut zu wissen.quelle
Zeichenfolge, wenn die Größe fest und klein ist, und Text, wenn sie variabel und groß ist. Dies ist wichtig, da Text viel größer als Zeichenfolgen ist. Es enthält viel mehr Kilobyte.
Verwenden Sie für kleine Felder immer string (varchar). Felder wie. Vorname, Login, E-Mail, Betreff (eines Artikels oder Beitrags) und Beispiel für Texte: Inhalt / Text eines Beitrags oder Artikels. Felder für Absätze usw.
Zeichenfolgengröße 1 bis 255 (Standard = 255)
Textgröße 1 bis 4294967296 (Standard = 65536) 2
quelle
Wie oben erläutert, wirkt sich dies nicht nur auf den Datentyp db aus, sondern auch auf die Ansicht, die beim Gerüstbau generiert wird. Zeichenfolge generiert ein text_field Text generiert einen text_area
quelle
Verwenden Sie eine Zeichenfolge für kürzere Felder wie Namen, Adresse, Telefon, Firma
Verwenden Sie Text für größere Inhalte, Kommentare, Inhalte und Absätze.
Meine allgemeine Regel: Wenn es sich um mehr als eine Zeile handelt, greife ich normalerweise zu Text. Wenn es sich um kurze 2-6 Wörter handelt, greife ich zu einer Zeichenfolge.
Die offizielle Regel ist 255 für eine Zeichenfolge. Wenn Ihre Zeichenfolge mehr als 255 Zeichen umfasst, wählen Sie Text.
quelle
Wenn Sie Orakel verwenden ...
STRING
wird alsVARCHAR(255)
Spalte undTEXT
alsCLOB
.https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb
quelle
Die akzeptierte Antwort ist fantastisch, sie erklärt den Unterschied zwischen Zeichenfolge und Text (meistens die Grenzgröße in der Datenbank, aber es gibt ein paar andere Fallstricke), aber ich wollte auf ein kleines Problem hinweisen, das mich als Antwort durchgebracht hat habe es nicht ganz für mich getan.
Die maximale Größe : limit => 1 bis 4294967296 funktionierte nicht genau wie angegeben, ich musste von dieser maximalen Größe auf -1 gehen. Ich speichere große JSON-Blobs und sie können manchmal verrückt groß sein.
Hier ist meine Migration mit dem größeren Wert, über den sich MySQL nicht beschwert.
Beachten Sie die 5 am Ende des Limits anstelle von 6
quelle
Wenn das Attribut
f.text_field
in der Form übereinstimmt , verwenden Sie eine Zeichenfolge . Wenn es übereinstimmt,f.text_area
verwenden Sie Text .quelle