484 Stimmen

Unterschied zwischen String und Text in Rails?

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?

4voto

user2012677 Punkte 4977

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.

2voto

nategurutech Punkte 148

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

1voto

Luis Punkte 11

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 }
}

https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb

0voto

CodingBingo Punkte 1

Wenn das Attribut übereinstimmt f.text_field in Form von Gebrauch String wenn sie übereinstimmt f.text_area utilice Text .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X