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?String für kürzere Felder wie Namen, Adresse, Telefon, Firma verwenden
Verwenden Sie Text für größere Inhalte, Kommentare, Inhalte, Absätze.
Wenn es sich um etwas handelt, das mehr als eine Zeile umfasst, wähle ich in der Regel Text, wenn es sich um kurze 2-6 Wörter handelt, wähle ich eine Zeichenkette.
Die offizielle Regel lautet 255 für eine Zeichenkette. Wenn Ihre Zeichenfolge also mehr als 255 Zeichen umfasst, sollten Sie sich für Text entscheiden.
Die akzeptierte Antwort ist großartig, es richtig erklärt den Unterschied zwischen String vs. Text (vor allem die Grenzgröße in der Datenbank, aber es gibt ein paar andere gotchas), aber ich wollte darauf hinweisen, ein kleines Problem, das mich durch es bekam, wie diese Antwort nicht vollständig tun es für mich.
Die maximale Größe :Grenze => 1 bis 4294967296 nicht genau so funktionierte wie angegeben, musste ich von dieser Maximalgröße auf -1 gehen. Ich speichere große JSON-Blobs und sie könnten manchmal verrückt groß sein.
Hier ist meine Migration mit dem größeren Wert anstelle des Wertes, über den sich MySQL nicht beschwert.
Beachten Sie die 5 am Ende des Limits anstelle von 6
class ChangeUserSyncRecordDetailsToText < ActiveRecord::Migration[5.1]
def up
change_column :user_sync_records, :details, :text, :limit => 4294967295
end
def down
change_column :user_sync_records, :details, :string, :limit => 1000
end
end
Wenn Sie Oracle verwenden... STRING
wird erstellt als VARCHAR(255)
Spalte und TEXT
, als ein CLOB
.
NATIVE_DATABASE_TYPES = {
primary_key: "NUMBER(38) NOT NULL PRIMARY KEY",
string: { name: "VARCHAR2", limit: 255 },
text: { name: "CLOB" },
ntext: { name: "NCLOB" },
integer: { name: "NUMBER", limit: 38 },
float: { name: "BINARY_FLOAT" },
decimal: { name: "DECIMAL" },
datetime: { name: "TIMESTAMP" },
timestamp: { name: "TIMESTAMP" },
timestamptz: { name: "TIMESTAMP WITH TIME ZONE" },
timestampltz: { name: "TIMESTAMP WITH LOCAL TIME ZONE" },
time: { name: "TIMESTAMP" },
date: { name: "DATE" },
binary: { name: "BLOB" },
boolean: { name: "NUMBER", limit: 1 },
raw: { name: "RAW", limit: 2000 },
bigint: { name: "NUMBER", limit: 19 }
}
- See previous answers
- Weitere Antworten anzeigen