VarBinary vs Image ¿Tipo de datos de SQL Server para almacenar datos binarios?

90

Necesito almacenar archivos binarios en la base de datos de SQL Server. ¿Cuál es el mejor tipo de datos de Varbinary e Image?

Yoann. si
fuente

Respuestas:

141

Dado que la imagen está en desuso, debe usar varbinary.

por Microsoft (gracias por el enlace @Christopher)

Los tipos de datos de texto, texto e imagen se eliminarán en una versión futura de Microsoft SQL Server. Evite el uso de estos tipos de datos en nuevos trabajos de desarrollo y planee modificar las aplicaciones que los usan actualmente. Utilice nvarchar (max), varchar (max) y varbinary (max) en su lugar.

Tipos de datos de longitud fija y variable para almacenar datos binarios y de caracteres grandes no Unicode y Unicode. Los datos Unicode utilizan el juego de caracteres UNICODE UCS-2.

cmsjr
fuente
1
@ cmsjr: tal vez porque, como dice Microsoft: "el tipo de datos de imagen se eliminará en una versión futura de Microsoft SQL Server".
Ehsan
4
@Ehsan Solo puedo asumir que no está familiarizado con el término obsoleto. En general, cuando dice que algo está desaprobado, está diciendo que no debe usarse porque se eliminará en el futuro. Entonces, mi publicación y la cita que publicaste en tu comentario significan esencialmente lo mismo.
cmsjr
No te preocupes, mencionas un buen punto. Actualizaré la redacción.
cmsjr
Yo no llamaría a esto una respuesta de "solo enlace". Yo llamaría a esto una "respuesta sucinta y correcta a una pregunta que incluye algunos enlaces útiles para aquellos que estén dispuestos a aprender más".
cmsjr
2
Seré franco y te haré saber que no estaba dispuesto a hacer la edición porque lo abordaste con un tono ofensivo y amenazante. Quizás no fue su intención ser grosero, pero parecía que lo estaba siendo para mí. La grosería a menudo puede llevar a las personas a descartar buenas ideas. Mejoré el contenido como sugirió, pero también le pido que piense un poco cómo presenta sus sugerencias.
cmsjr
13

varbinary(max) es el camino a seguir (introducido en SQL Server 2005)

SQLMenace
fuente
9

También está el bastante elegante FileStream, introducido en SQL Server 2008.

Andrew Rollings
fuente
spiffy: ¿ elegante en apariencia ?
Liam
"bastante elegante" tiene un significado algo más general (que simplemente "elegante") en la lengua vernácula común ... Más adecuado, creo.
Grantly
Esta pregunta trata sobre formatos de columna y FileStreames solo un comportamiento de almacenamiento. Filestream se implementa mediante el uso varbinary(max)y la realización de cambios en la instancia de su servidor SQL.
paqogomez
6

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

imagen

Datos binarios de longitud variable de 0 a 2 ^ 31-1 (2,147,483,647) bytes. Aún así, se admite el uso de tipos de datos de imagen, pero tenga en cuenta:

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

varbinary [(n | max)]

Datos binarios de longitud variable. n puede ser un valor de 1 a 8.000. max indica que el tamaño máximo de almacenamiento es 2 ^ 31-1 bytes. El tamaño de almacenamiento es la longitud real de los datos ingresados ​​+ 2 bytes. Los datos que se ingresan pueden tener 0 bytes de longitud. El sinónimo ANSI SQL para varbinary es binario variable.

Así que ambos tienen el mismo tamaño (2 GB). Pero tenga en cuenta:

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

Aunque el final del tipo de datos "imagen" aún no está determinado, debe utilizar el equivalente de prueba "futuro".

Pero tienes que preguntarte: ¿por qué almacenar BLOBS en una columna?

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

Bernhard
fuente