VarBinary vs Image SQL Server-Datentyp zum Speichern von Binärdaten?


90

Ich muss Binärdateien in der SQL Server-Datenbank speichern. Welches ist der bessere Datentyp aus Varbinary und Image?

Antworten:


141

Da das Bild veraltet ist, sollten Sie varbinary verwenden.

per Microsoft (danke für den Link @Christopher)

Die Datentypen ntext, text und image werden in einer zukünftigen Version von Microsoft SQL Server entfernt. Vermeiden Sie die Verwendung dieser Datentypen in neuen Entwicklungsarbeiten und planen Sie, Anwendungen zu ändern, die sie derzeit verwenden. Verwenden Sie stattdessen nvarchar (max), varchar (max) und varbinary (max).

Datentypen mit fester und variabler Länge zum Speichern großer Nicht-Unicode- und Unicode-Zeichen- und Binärdaten. Unicode-Daten verwenden den UNICODE UCS-2-Zeichensatz.


1
@ cmsjr: Vielleicht, weil, wie Microsoft sagt: "Der Bilddatentyp wird in einer zukünftigen Version von Microsoft SQL Server entfernt."
Ehsan

4
@Ehsan Ich kann nur davon ausgehen, dass Sie mit dem Begriff veraltet nicht vertraut sind. Wenn Sie sagen, dass etwas veraltet ist, sagen Sie im Allgemeinen, dass es nicht verwendet werden sollte, da es in Zukunft entfernt wird. Mein Beitrag und das Zitat, das Sie in Ihrem Kommentar gepostet haben, bedeuten also im Wesentlichen dasselbe.
cmsjr

Keine Sorge, Sie sprechen einen guten Punkt an. Ich werde die Formulierung aktualisieren.
cmsjr

Ich würde dies nicht als "Nur-Link" -Antwort bezeichnen. Ich würde dies eine "prägnante und korrekte Antwort auf eine Frage nennen, die einige hilfreiche Links für diejenigen enthält, die dazu neigen, mehr zu erfahren".
cmsjr

2
Ich werde ehrlich sein und Sie wissen lassen, dass ich nicht bereit war, die Bearbeitung vorzunehmen, weil Sie sich ihr mit einem beleidigenden und bedrohlichen Ton näherten. Vielleicht war es nicht deine Absicht, unhöflich zu sein, aber es schien, als wärst du mir so. Unhöflichkeit kann oft dazu führen, dass Menschen ansonsten gute Ideen ablehnen. Ich habe den Inhalt verbessert, wie Sie vorgeschlagen haben, aber ich möchte Sie auch bitten, darüber nachzudenken, wie Sie Ihre Vorschläge präsentieren.
cmsjr

13

varbinary(max) ist der richtige Weg (eingeführt in SQL Server 2005)


9

Es gibt auch das ziemlich schicke FileStream, das in SQL Server 2008 eingeführt wurde.


schick: schick im Aussehen ?
Liam

'ziemlich schick' hat eine etwas allgemeinere Bedeutung (als nur 'schick') in der Umgangssprache ... Am passendsten denke ich.
Grantly

Diese Frage bezieht sich auf Spaltenformate und FileStreamist nur ein Speicherverhalten. Filestream wird implementiert, indem Sie varbinary(max)Ihre SQL Server-Instanz verwenden und Änderungen daran vornehmen.
Paqogomez

6

https://docs.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql

Bild

Binärdaten variabler Länge von 0 bis 2 ^ 31-1 (2.147.483.647) Bytes. Die Verwendung des Bilddatentyps wird weiterhin unterstützt. Beachten Sie jedoch Folgendes:

https://docs.microsoft.com/en-us/sql/t-sql/data-types/binary-and-varbinary-transact-sql

varbinary [(n | max)]

Binärdaten variabler Länge. n kann ein Wert von 1 bis 8.000 sein. max gibt an, dass die maximale Speichergröße 2 ^ 31-1 Byte beträgt. Die Speichergröße ist die tatsächliche Länge der eingegebenen Daten + 2 Bytes. Die eingegebenen Daten können 0 Byte lang sein. Das ANSI SQL-Synonym für varbinary ist binär variierend.

Beide sind also gleich groß (2 GB). Aber beachten Sie:

https://docs.microsoft.com/en-us/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016#features-not-supported-in-a-future-version- of-sql-server

Obwohl das Ende des Datentyps "Bild" noch nicht festgelegt ist, sollten Sie das Äquivalent "Zukunftssicherheit" verwenden.

Aber Sie müssen sich fragen: Warum BLOBS in einer Spalte speichern?

https://docs.microsoft.com/en-us/sql/relational-databases/blob/compare-options-for-storing-blobs-sql-server

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.