VarBinary vs Image Type de données SQL Server pour stocker des données binaires?

90

J'ai besoin de stocker des fichiers binaires dans la base de données SQL Server. Quel est le meilleur type de données hors Varbinary et Image?

Yoann. B
la source

Réponses:

141

Étant donné que l'image est obsolète, vous devez utiliser varbinary.

par Microsoft (merci pour le lien @Christopher)

Les types de données ntext, texte et image seront supprimés dans une future version de Microsoft SQL Server. Évitez d'utiliser ces types de données dans de nouveaux travaux de développement et prévoyez de modifier les applications qui les utilisent actuellement. Utilisez à la place nvarchar (max), varchar (max) et varbinary (max).

Types de données de longueur fixe et variable pour le stockage de gros caractères non Unicode et Unicode et de données binaires. Les données Unicode utilisent le jeu de caractères UNICODE UCS-2.

cmsjr
la source
1
@ cmsjr: peut-être parce que, comme le dit Microsoft: "le type de données d'image sera supprimé dans une future version de Microsoft SQL Server".
Ehsan
4
@Ehsan Je ne peux que supposer que vous n'êtes pas familier avec le terme obsolète. En général, lorsque vous dites qu'un élément est obsolète, vous dites qu'il ne devrait pas être utilisé car il sera supprimé à l'avenir. Donc mon message et la citation que vous avez publiée dans votre commentaire signifient essentiellement la même chose.
cmsjr
Pas de soucis, vous soulevez un bon point. Je vais mettre à jour la formulation.
cmsjr
Je n'appellerais pas cela une réponse "lien uniquement". J'appellerais cela une «réponse succincte et correcte à une question qui comprend des liens utiles pour ceux qui sont enclins à en savoir plus».
cmsjr
2
Je vais être franc et vous faire savoir que je n'étais pas disposé à faire le montage parce que vous l'avez abordé avec un ton offensant et menaçant. Ce n'était peut-être pas votre intention d'être impoli, mais il me semblait que vous l'étiez. La grossièreté peut souvent amener les gens à rejeter de bonnes idées par ailleurs. J'ai amélioré le contenu comme vous l'avez suggéré, mais je vous demanderais également de réfléchir à la manière dont vous présentez vos suggestions.
cmsjr
13

varbinary(max) est la voie à suivre (introduite dans SQL Server 2005)

SQLMenace
la source
9

Il y a aussi le plutôt spiffy FileStream, introduit dans SQL Server 2008.

Andrew Rollings
la source
spiffy: intelligent en apparence ?
Liam
«plutôt spiffy» a un sens un peu plus général (que simplement «spiffy») dans la langue vernaculaire commune ... Le plus approprié je pense.
Grantly
Cette question concerne les formats de colonne et FileStreamn'est qu'un comportement de stockage. Filestream est implémenté en utilisant varbinary(max)et en apportant des modifications à votre instance de serveur SQL.
paqogomez
6

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

image

Données binaires de longueur variable de 0 à 2 ^ 31-1 (2 147 483 647) octets. Il est toujours pris en charge d'utiliser le type de données image, mais soyez conscient de:

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

varbinary [(n | max)]

Données binaires de longueur variable. n peut être une valeur comprise entre 1 et 8 000. max indique que la taille de stockage maximale est de 2 ^ 31-1 octets. La taille de stockage est la longueur réelle des données saisies + 2 octets. Les données saisies peuvent avoir une longueur de 0 octet. Le synonyme ANSI SQL de varbinary varie en binaire.

Les deux sont donc de taille égale (2 Go). Mais soyez conscient 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

Bien que la fin du type de données "image" ne soit toujours pas déterminée, vous devez utiliser l'équivalent de preuve "future".

Mais vous devez vous demander: pourquoi stocker des BLOBS dans une colonne?

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

Bernhard
la source