Ich mache eine neue Web-App mit Rails, und fragte mich, was ist der Unterschied zwischen string
y text
? Und wann sollten sie eingesetzt werden?
Antworten
Zu viele Anzeigen?Der Unterschied liegt darin, wie das Symbol in der Abfragesprache in den entsprechenden Spaltentyp umgewandelt wird.
bei MySQL wird :string auf VARCHAR(255) abgebildet
:string | VARCHAR | :limit => 1 to 255 (default = 255)
:text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536)
Referenz:
Wann sollten sie eingesetzt werden?
Als allgemeine Faustregel gilt :string
für kurze Texteingaben (Benutzername, E-Mail, Passwort, Titel usw.) und verwenden Sie :text
für länger erwartete Eingaben wie Beschreibungen, Kommentarinhalte usw.
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.
Es gibt keinen Leistungsunterschied zwischen diesen drei Typen, abgesehen von dem größeren Speicherplatz bei der Verwendung des Typs mit Leerzeichen und einigen zusätzlichen CPU-Zyklen zur Überprüfung der Länge beim Speichern in einer längenbeschränkten Spalte. Während character(n) in einigen anderen Datenbanksystemen Leistungsvorteile hat, gibt es diesen Vorteil in PostgreSQL nicht; tatsächlich ist character(n) wegen seiner zusätzlichen Speicherkosten normalerweise der langsamste der drei Typen. In den meisten Situationen sollte stattdessen text oder character varying verwendet werden
String wird in Ihrer Datenbank mit "Varchar" übersetzt, während Text mit "text" übersetzt wird. Ein varchar kann viel 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 Datenbank-Engines können laden varchar
in einem Rutsch, aber speichern Sie Text (und Blob) außerhalb der Tabelle. A SELECT name, amount FROM products
viel langsamer sein könnte, wenn man text
für name
als wenn Sie die varchar
. Und da Rails standardmäßig die Datensätze mit SELECT * FROM...
werden Ihre Textspalten geladen. Dies wird aber wahrscheinlich nie ein wirkliches Problem in Ihrer oder meiner Anwendung sein (Vorzeitige Optimierung ist ...). Aber zu wissen, dass Text nicht immer "frei" ist, ist gut zu wissen.
String, wenn die Größe fest und klein ist, und Text, wenn sie variabel und groß ist. Das ist ziemlich wichtig, weil Text viel größer ist als Strings. Er enthält viel mehr Kilobytes.
Verwenden Sie daher für kleine Felder immer string(varchar). Felder wie: Vorname, Login, E-Mail, Betreff (eines Artikels oder Beitrags) und Beispiele für Texte: Inhalt/Body eines Beitrags oder Artikels, Felder für Absätze usw.
Stringgröße 1 bis 255 (Standard = 255)
Textgröße 1 bis 4294967296 (Standard = 65536)2
- See previous answers
- Weitere Antworten anzeigen