VarBinary a obraz Typ danych SQL Server do przechowywania danych binarnych?

91

Muszę przechowywać pliki binarne w bazie danych SQL Server. Który typ danych jest lepszy niż Varbinary i obraz?

Yoann. b
źródło

Odpowiedzi:

143

Ponieważ image jest przestarzały, powinieneś używać varbinary.

per Microsoft (dzięki za link @Christopher)

Typy danych ntext, text i image zostaną usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania tych typów danych w nowych pracach programistycznych i planuj modyfikowanie aplikacji, które obecnie z nich korzystają. Zamiast tego użyj nvarchar (max), varchar (max) i varbinary (max).

Typy danych o stałej i zmiennej długości do przechowywania dużych znaków innych niż Unicode i Unicode oraz danych binarnych. Dane Unicode używają zestawu znaków UNICODE UCS-2.

cmsjr
źródło
1
@ cmsjr: może dlatego, że jak mówi Microsoft: „typ danych obrazu zostanie usunięty w przyszłej wersji Microsoft SQL Server”.
Ehsan
5
@Ehsan Mogę tylko założyć, że nie znasz terminu przestarzały. Ogólnie mówiąc, że coś jest przestarzałe, oznacza to, że nie powinno się tego używać, ponieważ w przyszłości zostanie usunięte. Mój post i cytat, który zamieściłeś w swoim komentarzu, oznaczają zasadniczo to samo.
cmsjr
Nie martw się, masz dobry punkt widzenia. Zaktualizuję frazę.
cmsjr
Nie nazwałbym tego odpowiedzią „tylko łącze”. Nazwałbym to „zwięzłą i poprawną odpowiedzią na pytanie, która zawiera przydatne linki dla tych, którzy chcą dowiedzieć się więcej”.
cmsjr
2
Będę szczery i powiem ci, że nie chciałem robić edycji, ponieważ podszedłeś do niej z obraźliwym i groźnym tonem. Być może nie było Twoim zamiarem bycie niegrzecznym, ale wydawało mi się, że tak robisz. Nieuprzejmość często prowadzi ludzi do odrzucenia dobrych pomysłów. Poprawiłem treść zgodnie z sugestią, ale proszę również o przemyślenie sposobu przedstawiania sugestii.
cmsjr
14

varbinary(max) jest drogą do zrobienia (wprowadzone w SQL Server 2005)

SQLMenace
źródło
9

Jest też dość sprytny FileStream, wprowadzony w SQL Server 2008.

Andrew Rollings
źródło
1
sprytny : elegancki z wyglądu ?
Liam,
1
„raczej sprytny” ma nieco bardziej ogólne znaczenie (niż tylko „sprytny”) w potocznym języku potocznym… Wydaje mi się, że najbardziej trafne.
Przyznaję
To pytanie dotyczy formatów kolumn i FileStreamjest tylko sposobem przechowywania. Filestream jest implementowany przy użyciu varbinary(max)i wprowadzaniu zmian w instancji serwera sql.
paqogomez
6

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

wizerunek

Dane binarne o zmiennej długości od 0 do 2 ^ 31-1 (2 147 483 647) bajtów. Nadal jest obsługiwane używanie typu danych obrazu, ale pamiętaj o:

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

varbinary [(n | max)]

Dane binarne o zmiennej długości. n może mieć wartość od 1 do 8 000. max wskazuje, że maksymalny rozmiar magazynu to 2 ^ 31-1 bajtów. Rozmiar pamięci to rzeczywista długość wprowadzonych danych + 2 bajty. Wprowadzane dane mogą mieć długość 0 bajtów. Synonim ANSI SQL dla varbinary jest binarnie zmienny.

Więc oba mają jednakowy rozmiar (2 GB). Ale pamiętaj o:

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

Chociaż koniec typu danych „obraz” nadal nie jest określony, należy użyć odpowiednika „przyszłości”.

Ale musisz zadać sobie pytanie: po co przechowywać BLOBY w kolumnie?

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

Bernhard
źródło