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





Поскольку изображение устарело, вы должны использовать varbinary.
за Microsoft(спасибо за ссылку @Christopher)
ntext , text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.
Fixed and variable-length data types for storing large non-Unicode and Unicode character and binary data. Unicode data uses the UNICODE UCS-2 character set.
@Ehsan Я могу только предположить, что вы не знакомы с термином "устаревший". В общем, когда вы говорите, что что-то устарело, вы говорите, что это не должно использоваться, потому что оно будет удалено в будущем. Так что мой пост и цитата, которую вы опубликовали в своем комментарии, означают, по сути, одно и то же.
Не беспокойтесь, вы подняли хороший вопрос. Я обновлю формулировку.
Я бы не назвал это ответом "только по ссылке". Я бы назвал это «кратким и правильным ответом на вопрос, который включает несколько полезных ссылок для тех, кто склонен узнать больше».
Я буду откровенен и дам вам знать, что я не был склонен вносить изменения, потому что вы подошли к нему в оскорбительном и угрожающем тоне. Возможно, вы не хотели показаться грубым, но мне показалось, что вы поступали так со мной. Грубость часто может привести к тому, что люди отвергнут хорошие в остальном идеи. Я улучшил содержание, как вы предлагали, но я также прошу вас подумать о том, как вы представляете свои предложения.
Интересно, почему Microsoft не документирует влияние ALTER TABLE, я бы предположил, что это всего лишь изменение метаданных? Есть ли у кого-нибудь опыт с этим? (Позже протестирую и сообщу)
@eckes Это не изменение метаданных, оно создает невероятно большие файлы журнала. Думаю, воссоздание таблицы с минимальным ведением журнала будет быстрее.
varbinary(max) - это путь (введен в SQL Server 2005)
Существует также довольно элегантный FileStream, представленный в SQL Server 2008.
шикарно: умный на вид?
«довольно элегантный» имеет несколько более общее значение (чем просто «элегантный») в просторечии ... Я думаю, наиболее уместно.
Этот вопрос касается форматов столбцов, а FileStream - это просто поведение хранилища. Файловый поток реализуется с помощью varbinary(max) и внесения изменений в ваш экземпляр сервера sql.
https://docs.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql
image
Variable-length binary data from 0 through 2^31-1 (2,147,483,647) bytes. Still it IS supported to use image datatype, but be aware of:
https://docs.microsoft.com/en-us/sql/t-sql/data-types/binary-and-varbinary-transact-sql
varbinary [ ( n | max) ]
Variable-length binary data. n can be a value from 1 through 8,000. max indicates that the maximum storage size is 2^31-1 bytes. The storage size is the actual length of the data entered + 2 bytes. The data that is entered can be 0 bytes in length. The ANSI SQL synonym for varbinary is binary varying.
Таким образом, оба имеют одинаковый размер (2 ГБ). Но имейте в виду:
Хотя конец типа данных «изображение» все еще не определен, вы должны использовать эквивалент «будущего».
Но вы должны спросить себя: зачем хранить большие двоичные объекты в столбце?
@ cmsjr: возможно, потому что, как говорит Microsoft: «тип данных изображения будет удален в будущей версии Microsoft SQL Server».