24 Stimmen

Datenbankdesign: bevorzugte Feldlänge für Dateipfade

Ich muss Dateipfade in einem DB-Feld speichern ( /tmp/aaa/bbb , C:\temp\xxx\yyy , etc.). Ich kann nicht wirklich sagen, wie lang sie sein könnten.

Angesichts dieser http://en.wikipedia.org/wiki/Comparison_of_file_systems und dass http:/ Je nach Dateisystem kann es theoretisch keine Längenbegrenzung für einen Pfad geben.

Ich vermute, dass die Definition dieses Feldes als LONGBLOB ou VARCHAR(very high value) wäre nicht klug. Ich habe über etwas nachgedacht wie VARCHAR(1024) was für die meisten häufigen (wenn auch nicht alle) Fälle geeignet sein sollte, und als DB-Feld nicht zu groß. Was würden Sie empfehlen?

Gracias.

10voto

Oded Punkte 475566

Sie können verwenden VARCHAR(MAX) ou NVARCHAR(MAX) .

Dies sind Felder mit variabler Länge, d. h. sie sind für die Speicherung von Werten unterschiedlicher Länge ausgelegt. Es gibt keinen zusätzlichen Overhead für längere Werte gegenüber kürzeren Werten.

Definition von MAX bedeutet, dass das Feld bis zu 2 GB groß sein kann.

Von MSDN (varchar), nvarchar hat eine ähnliche Dokumentation:

Verwenden Sie varchar, wenn die Größe der Dateneinträge in den Spalten stark variiert.

Verwenden Sie varchar(max), wenn die Größe der Spaltendateneinträge stark variiert und die Größe 8.000 Bytes überschreiten könnte.

3voto

Tharindu Punkte 61

Die Länge eines Dateipfads kann nicht vorhergesagt werden. Sie kann sehr kurz sein, wie 'C:\' oder könnte sehr lang sein wie 'C:\Program Files\Microsoft SQL Server\110\LocalDB\Binn\Resources\1033' oder sogar mehr. Aber auf Datenbankebene kann es nicht schaden, etwas wie VARCHAR(MAX)

Siehe Maximale Größe von VARCHAR(MAX)

2voto

RC_Cleland Punkte 2234

Ich schlage vor, dass Sie die Pfade nicht in Ihrer bestehenden Tabelle speichern. Erstellen Sie eine neue Tabelle mit einem sequentiellen Zähler als geclustertem Primärschlüssel und einer Zeichenspalte mit der maximalen Länge Ihres DB-Programms. Ich verwende SQL Server, also würde ich varchar(max) verwenden.

Erstellen Sie eine Spalte in Ihrer Datentabelle, die den Primärschlüssel der Tabelle "Pfade" enthält. Fügen Sie zuerst in die Tabelle "Pfade" ein und verwenden Sie dann den Primärschlüssel als Fremdschlüssel zurück in Ihre Datentabelle.

Der Vorteil der Speicherung des Wertes in einer anderen Tabelle besteht darin, dass sie die Datengröße der Basistabelle nicht beeinflusst. Abfragen der Basistabelle, die nicht die "Pfade" betreffen, leiden nicht darunter, dass ein großer Zeichenwert eingezogen werden muss, was den IO-Verkehr erhöht.

1voto

Ian Ringrose Punkte 50437

Das Feld sollte die gleiche Länge haben wie die Länge einer Kiste mit Schnüren.

So wie die Frage nach der Länge eines Dateinamens die Frage nach der Länge eines Bits einer Zeichenkette ist, so ist die Frage nach der Länge eines Pfades die Frage nach der Länge aller Bits einer Zeichenkette in einer Box unbekannter Größe.

Die einzig sinnvolle Option ist also keine weiteren Informationen erhalten ist die Länge nicht zu begrenzen, z. B. NVARCHAR(MAX)

-2voto

Nipuna Punkte 6086

Ich würde empfehlen VARCHAR(2048) oder sogar VARCHAR(1024) da Dateipfade normalerweise nicht 2000 Zeichen lang sind.

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