Was ist der üblicher Weg, willkürlich (möglicherweise markiert) Text in SQL zu speichern?

StackOverflow https://stackoverflow.com/questions/95459

  •  01-07-2019
  •  | 
  •  

Frage

Was tun Wikis / Stackoverflow / etc. tun, wenn es um Text zu speichern? Ist der Text Zeilenumbrüche gebrochen? Ist es in fester Länge Brocken gebrochen? Wie kann man am besten Speicher beliebig lange Textteile?

War es hilfreich?

Lösung

nvarchar (max) ftw. weil über einfache Dinge zu verkomplizieren ist schlecht, mmkay?

Andere Tipps

Ich denke, wenn man die Fähigkeit zu speichern große Teile des Textes bieten müssen und es Ihnen nichts ausmacht nicht in der Lage zu sein in ihrem Inhalt aussehen zu viel, wenn die Abfrage, können Sie CLOBs verwenden.

Das alles hängt von der RDBMS, die Sie sowie die Arten von Text verwenden, die Sie speichern wollen. Wenn der Text in ansehnliche Stücke von Daten formatiert ist, das etwas an und für sich bedeuten, wie, sagen Kopf- / Körper, dann könnten Sie die Daten nach oben in Spalten dieser Typen brechen wollen. Es kann mehrere Tabellen nehmen, diese Methode zu verwenden, je nach Inhalt, die Sie beschäftigen.

Ich weiß nicht, wie andere RDBMS damit umgehen, aber ich weiß, dass es keine gute Idee, in jeder Tabelle (Text oder varchar (max)) mehr als eine am Ende offene Spalte zu haben. So wollen Sie sicherstellen, dass nur eine Spalte unbegrenzte Zeichen hat.

In Bezug auf PostgreSQL - Nutzungsart TEXT oder BYTEA . Wenn Sie zufällig Stücke lesen brauchen können Sie prüfen, große Objekte .

Wenn Sie über das Halten Dinge wie Formatierung Strings kümmern, Zitate und andere „cruft“ im Text, als Code würde wahrscheinlich haben, dann werden die Sonderzeichen müssen zunächst vollständig entgangen sein - sonst gegen Vorlage der db, sie könnte am Ende verursacht ein ungültiger Befehl ausgegeben werden.

Die meisten Skriptsprachen haben Tools diese integrierte in nativ zu tun.

Ich denke, es hängt davon ab, wo Sie wollen, um den Text zu speichern, wenn Sie Dinge wie Transaktionen benötigen etc.

Datenbanken wie SQL Server haben einen Typ, der lange Textfelder speichern kann. In SQL Server 2005 würde dies nvarchar (max) für lange Unicode-Text-Strings in erster Linie sein. Durch die Verwendung einer Datenbank können Sie von Transaktionen und einfache Datensicherung profitieren / Restore vorausgesetzt, Sie die Datenbank für andere Dinge, wie verwenden StackOverflow.com der Fall ist.

Die Alternative ist, Text in Dateien auf der Festplatte zu speichern. Dies kann ziemlich einfach zu implementieren sein und kann in Umgebungen arbeiten, wo eine Datenbank nicht vorhanden oder Overkill ist.

Viele Grüße das Format des Textes, der in einer Datenbank oder Datei gespeichert wird, ist es wahrscheinlich sehr nahe am Eingang. Wenn es HTML ist dann schieben Sie es einfach durch eine Funktion, die es richtig entweichen würde.

Etwas zu erinnern ist, dass Sie wahrscheinlich mit Unicode oder UTF-8 von der Erstellung bis Lagerung und umgekehrt sein wollen. Dies ermöglicht Ihnen, weitere Sprachen zu unterstützen. Jedes Problem mit dieser Codierung Mechanismus beschädigt Ihr Text. Historisch gesehen zu ASCII Menschen können auf der Annahme, Verzug geraten basieren sie Speicherplatz sparen etc.

Für SQL Server:

Verwenden Sie eine varchar (max) zu speichern. Ich denke, die Obergrenze beträgt 2 GB.

Versuchen Sie nicht, den Text selbst zu entkommen. Übergeben Sie den Text durch eine Parametrier- Struktur, die die Fluchten richtig für Sie tun. In .Net würden Sie einen Parameter auf einen SqlCommand hinzuzufügen, oder einfach nur LinqToSQL verwenden (die dann die SqlCommand für Sie verwaltet).

Ich vermute, Stackoverflow wird in beliebig großen 'Text' Spalte Text in Abschlags-Format zu speichern. Vielleicht als UTF8 (aber es könnte UTF16 oder so etwas. Ich schätze, dass es SQL Server ist, das weiß ich nicht viel über).

Als allgemeine Regel, die Sie wollen Sachen speichern, in Ihrer Datenbank in der ‚rawest‘ Form möglich. Das heißt, alle deine Decodierung und eventuell Reinigung, aber tun nichts anderes damit (zum Beispiel, wenn es Markdown ist, nicht codieren es zu HTML, lassen Sie es in seiner ursprünglichen ‚Rohformat‘)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top