VarBinary vs Image SQL Server Data Type per archiviare dati binari?


90

Devo memorizzare i file binari nel database di SQL Server. Qual è il miglior tipo di dati tra Varbinary e Image?

Risposte:


141

Poiché l'immagine è deprecata, dovresti usare varbinary.

per Microsoft (grazie per il collegamento @Christopher)

I tipi di dati ntext, text e image verranno rimossi in una versione futura di Microsoft SQL Server. Evita di utilizzare questi tipi di dati in un nuovo lavoro di sviluppo e pianifica di modificare le applicazioni che li utilizzano attualmente. Utilizza invece nvarchar (max), varchar (max) e varbinary (max).

Tipi di dati a lunghezza fissa e variabile per l'archiviazione di dati binari e caratteri non Unicode e Unicode di grandi dimensioni. I dati Unicode utilizzano il set di caratteri UNICODE UCS-2.


1
@ cmsjr: forse perché, come dice Microsoft: "il tipo di dati immagine verrà rimosso in una versione futura di Microsoft SQL Server".
Ehsan

4
@ Ehsan Posso solo presumere che tu non abbia familiarità con il termine deprecato. In generale, quando dici che qualcosa è deprecato, stai dicendo che non dovrebbe essere usato perché verrà rimosso in futuro. Quindi il mio post e la citazione che hai postato nel tuo commento significano essenzialmente la stessa cosa.
cmsjr

Nessun problema, sollevi un buon punto. Aggiornerò il fraseggio.
cmsjr

Non la definirei una risposta "solo collegamento". La definirei una risposta "succinta e corretta a una domanda che include alcuni collegamenti utili per coloro che sono inclini a saperne di più".
cmsjr

2
Sarò franco e ti farò sapere che non ero incline a fare il montaggio perché ti sei avvicinato con un tono offensivo e minaccioso. Forse non era tua intenzione essere scortese, ma con me sembrava che lo fossi. La maleducazione può spesso portare le persone a respingere idee altrimenti buone. Ho migliorato il contenuto come mi hai suggerito, ma ti chiederei anche di riflettere su come presenti i tuoi suggerimenti.
cmsjr

13

varbinary(max) è la strada da percorrere (introdotto in SQL Server 2005)


9

C'è anche il piuttosto spiffy FileStream, introdotto in SQL Server 2008.


spiffy: intelligente in apparenza ?
Liam

"piuttosto elegante" ha un significato un po 'più generale (che semplicemente "elegante") nel vernacolo comune ... Più appropriato penso.
Grantly,

Questa domanda riguarda i formati delle colonne ed FileStreamè solo un comportamento di archiviazione. Filestream viene implementato utilizzando varbinary(max)e apportando modifiche all'istanza del server sql.
paqogomez

6

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

Immagine

Dati binari a lunghezza variabile da 0 a 2 ^ 31-1 (2.147.483.647) byte. È ancora supportato per utilizzare il tipo di dati dell'immagine, ma tieni presente:

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

varbinary [(n | max)]

Dati binari a lunghezza variabile. n può essere un valore compreso tra 1 e 8.000. max indica che la dimensione di archiviazione massima è 2 ^ 31-1 byte. La dimensione di archiviazione è la lunghezza effettiva dei dati inseriti + 2 byte. I dati immessi possono avere una lunghezza di 0 byte. Il sinonimo ANSI SQL per varbinary è binario variabile.

Quindi entrambi hanno le stesse dimensioni (2 GB). Ma fai attenzione a:

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

Sebbene la fine del tipo di dati "immagine" non sia ancora determinata, dovresti usare l'equivalente di prova "futuro".

Ma devi chiederti: perché archiviare BLOB in una colonna?

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.