VarBinary vs Image SQL Server Data Type для хранения двоичных данных?

91

Мне нужно хранить двоичные файлы в базе данных SQL Server. Какой тип данных лучше из Varbinary и Image?

Йоанн. B
источник

Ответы:

143

Поскольку изображение устарело, вы должны использовать varbinary.

за Microsoft (спасибо за ссылку @Christopher)

Типы данных ntext, text и image будут удалены в будущей версии Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и запланируйте изменение приложений, которые в настоящее время их используют. Вместо этого используйте nvarchar (max), varchar (max) и varbinary (max).

Типы данных фиксированной и переменной длины для хранения больших символьных и двоичных данных, отличных от Unicode и Unicode. Данные Unicode используют набор символов UNICODE UCS-2.

cmsjr
источник
1
@ cmsjr: возможно, потому что, как говорит Microsoft: «тип данных изображения будет удален в будущей версии Microsoft SQL Server».
Ehsan
5
@Ehsan Я могу только предположить, что вы не знакомы с термином "устаревший". В общем, когда вы говорите, что что-то устарело, вы говорите, что это не должно использоваться, потому что оно будет удалено в будущем. Так что мой пост и цитата, которую вы опубликовали в своем комментарии, означают по сути одно и то же.
cmsjr
Не беспокойтесь, вы поднимаете хороший вопрос. Обновлю фразировку.
cmsjr
Я бы не назвал это ответом "только по ссылке". Я бы назвал это «кратким и правильным ответом на вопрос, который включает некоторые полезные ссылки для тех, кто склонен узнать больше».
cmsjr
2
Я буду откровенен и дам вам знать, что я не был склонен вносить изменения, потому что вы подошли к нему в оскорбительном и угрожающем тоне. Возможно, вы не хотели показаться грубым, но мне показалось, что вы поступали так со мной. Грубость часто приводит к тому, что люди отвергают хорошие идеи. Я улучшил содержание, как вы предлагали, но я также прошу вас подумать о том, как вы представляете свои предложения.
cmsjr
14

varbinary(max) это путь (введен в SQL Server 2005)

SQLMenace
источник
9

Есть также довольно элегантный FileStream, представленный в SQL Server 2008.

Эндрю Роллингс
источник
1
шикарный : умный с виду ?
Лиам
1
«довольно элегантный» имеет несколько более общее значение (чем просто «элегантный») в просторечии ... Я думаю, наиболее уместно.
Грантли
Этот вопрос касается форматов столбцов и касается FileStreamвсего лишь хранилища. Filestream реализуется путем использования varbinary(max)и внесения изменений в ваш экземпляр sql-сервера.
paqogomez
6

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

образ

Двоичные данные переменной длины от 0 до 2 ^ 31-1 (2147483647) байтов. Тем не менее поддерживается использование типа данных изображения, но имейте в виду:

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

varbinary [(n | макс)]

Двоичные данные переменной длины. n может принимать значения от 1 до 8000. max указывает, что максимальный размер хранилища составляет 2 ^ 31-1 байта. Размер хранилища - это фактическая длина введенных данных + 2 байта. Вводимые данные могут иметь длину 0 байт. Синоним ANSI SQL для varbinary является двоичным.

Так что оба они одинакового размера (2 ГБ). Но имейте в виду:

https://docs.microsoft.com/en-us/sql/database-engine/deprecated-database-engine-features-in-sql-server-2016#features-not-supported-in-a-future-version- из-sql-сервера

Хотя конец типа данных «изображение» все еще не определен, следует использовать эквивалент «будущего».

Но вы должны спросить себя: зачем хранить большие двоичные объекты в столбце?

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

Бернхард
источник