VarBinary vs Image Tipo de dados do SQL Server para armazenar dados binários?

90

Preciso armazenar arquivos binários no banco de dados do SQL Server. Qual é o melhor tipo de dados de Varbinary e Image?

Yoann. B
fonte

Respostas:

141

Como a imagem está obsoleta, você deve usar varbinary.

por Microsoft (obrigado pelo link @Christopher)

Os tipos de dados ntext, text e image serão removidos em uma versão futura do Microsoft SQL Server. Evite usar esses tipos de dados em novos trabalhos de desenvolvimento e planeje modificar os aplicativos que os usam atualmente. Use nvarchar (max), varchar (max) e varbinary (max).

Tipos de dados de comprimento fixo e variável para armazenar grandes caracteres não Unicode e Unicode e dados binários. Os dados Unicode usam o conjunto de caracteres UNICODE UCS-2.

cmsjr
fonte
1
@ cmsjr: talvez porque, como a Microsoft diz: "o tipo de dados da imagem será removido em uma versão futura do Microsoft SQL Server."
Ehsan
4
@Ehsan Só posso presumir que você não está familiarizado com o termo obsoleto. Em geral, quando você diz que algo está obsoleto, está dizendo que ele não deve ser usado porque será removido no futuro. Portanto, minha postagem e a citação que você postou em seu comentário significam essencialmente a mesma coisa.
cmsjr
Não se preocupe, você mencionou um bom ponto. Vou atualizar o fraseado.
cmsjr
Eu não chamaria isso de uma resposta "apenas com link". Eu chamaria isso de uma resposta "sucinta e correta para uma pergunta que inclui alguns links úteis para aqueles que estão inclinados a aprender mais".
cmsjr
2
Serei franco e avisarei que não quis fazer a edição porque você a abordou com um tom ofensivo e ameaçador. Talvez não fosse sua intenção ser rude, mas parecia que estava sendo rude comigo. A rudeza muitas vezes pode levar as pessoas a rejeitar boas idéias. Melhorei o conteúdo conforme você sugeriu, mas também gostaria que você refletisse um pouco sobre como apresentará suas sugestões.
cmsjr
13

varbinary(max) é o caminho a seguir (introduzido no SQL Server 2005)

SQLMenace
fonte
9

Há também o bastante sofisticado FileStream, introduzido no SQL Server 2008.

Andrew Rollings
fonte
sofisticado: inteligente na aparência ?
Liam
'bastante sofisticado' tem um significado um pouco mais geral (do que apenas 'sofisticado') no vernáculo comum ... Muito apropriado, eu acho.
Grantly
Esta questão é sobre formatos de coluna e FileStreamé apenas um comportamento de armazenamento. Filestream é implementado usando varbinary(max)e fazendo alterações em sua instância de servidor sql.
paqogomez
6

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

imagem

Dados binários de comprimento variável de 0 a 2 ^ 31-1 (2.147.483.647) bytes. Ainda assim, é possível usar o tipo de dados de imagem, mas esteja ciente de:

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

varbinary [(n | max)]

Dados binários de comprimento variável. n pode ser um valor de 1 a 8.000. max indica que o tamanho máximo de armazenamento é 2 ^ 31-1 bytes. O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes. Os dados inseridos podem ter 0 bytes de comprimento. O sinônimo ANSI SQL para varbinary é binário variando.

Portanto, ambos têm o mesmo tamanho (2 GB). Mas esteja ciente de:

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

Embora o fim do tipo de dados "imagem" ainda não tenha sido determinado, você deve usar o equivalente de prova "futuro".

Mas você precisa se perguntar: por que armazenar BLOBS em uma coluna?

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

Bernhard
fonte