VarBinary vs Image Kiểu dữ liệu máy chủ SQL để lưu trữ dữ liệu nhị phân?


90

Tôi cần lưu trữ các tệp nhị phân vào Cơ sở dữ liệu SQL Server. Loại Dữ liệu nào tốt hơn ngoài Varbinary và Image?

Câu trả lời:


141

Vì hình ảnh không được chấp nhận, bạn nên sử dụng varbinary.

mỗi Microsoft (cảm ơn vì liên kết @Christopher)

Các kiểu dữ liệu ntext, văn bản và hình ảnh sẽ bị xóa trong phiên bản Microsoft SQL Server trong tương lai. Tránh sử dụng các loại dữ liệu này trong công việc phát triển mới và lên kế hoạch sửa đổi các ứng dụng hiện đang sử dụng chúng. Thay vào đó hãy sử dụng nvarchar (max), varchar (max) và varbinary (max).

Các kiểu dữ liệu có độ dài thay đổi và cố định để lưu trữ dữ liệu nhị phân và ký tự không phải Unicode và Unicode lớn. Dữ liệu Unicode sử dụng bộ ký tự UNICODE UCS-2.


1
@ cmsjr: có thể vì như Microsoft nói: "kiểu dữ liệu hình ảnh sẽ bị xóa trong phiên bản tương lai của Microsoft SQL Server."
Ehsan

4
@Ehsan Tôi chỉ có thể cho rằng bạn không quen với thuật ngữ không được dùng nữa. Nói chung khi bạn nói điều gì đó không được dùng nữa, bạn đang nói rằng không nên sử dụng nó vì nó sẽ bị loại bỏ trong tương lai. Vì vậy, bài đăng của tôi và câu trích dẫn bạn đã đăng trong bình luận của bạn về cơ bản có nghĩa giống nhau.
cmsjr

Đừng lo lắng, bạn mang đến một điểm tốt. Tôi sẽ cập nhật cụm từ.
cmsjr

Tôi sẽ không gọi đây là câu trả lời "chỉ liên kết". Tôi gọi đây là câu trả lời "ngắn gọn và chính xác cho một câu hỏi bao gồm một số liên kết hữu ích cho những người có xu hướng tìm hiểu thêm".
cmsjr

2
Tôi sẽ thẳng thắn và cho bạn biết rằng tôi không muốn thực hiện bản chỉnh sửa vì bạn đã tiếp cận nó với giọng điệu xúc phạm và đe dọa. Có lẽ ý định của bạn không phải là thô lỗ, nhưng có vẻ như bạn đang đối xử với tôi như vậy. Sự thô lỗ thường có thể khiến mọi người gạt bỏ những ý tưởng hay. Tôi đã cải thiện nội dung như bạn đề xuất, nhưng tôi cũng sẽ yêu cầu bạn suy nghĩ một chút về cách bạn trình bày đề xuất của mình.
cmsjr

13

varbinary(max) là cách để đi (được giới thiệu trong SQL Server 2005)


9

Ngoài ra còn có một cấu trúc khá phức tạp FileStream, được giới thiệu trong SQL Server 2008.


spiffy: thông minh về ngoại hình ?
Liam

'khá nhiều gai' có một nghĩa chung chung hơn (thay vì chỉ 'có nhiều gai') trong tiếng địa phương thông thường ... Tôi nghĩ là phù hợp nhất.
Grantly

Câu hỏi này là về các định dạng cột và FileStreamchỉ là một hành vi lưu trữ. Filestream được thực hiện bằng cách sử dụng varbinary(max)và thực hiện các thay đổi đối với phiên bản máy chủ sql của bạn.
paqogomez

6

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

hình ảnh

Dữ liệu nhị phân có độ dài thay đổi từ 0 đến 2 ^ 31-1 (2,147,483,647) byte. Nó vẫn được hỗ trợ để sử dụng kiểu dữ liệu hình ảnh, nhưng hãy lưu ý:

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

varbinary [(n | max)]

Dữ liệu nhị phân có độ dài thay đổi. n có thể là một giá trị từ 1 đến 8.000. max cho biết rằng kích thước lưu trữ tối đa là 2 ^ 31-1 byte. Kích thước lưu trữ là độ dài thực của dữ liệu được nhập + 2 byte. Dữ liệu được nhập có thể có độ dài 0 byte. Từ đồng nghĩa ANSI SQL cho varbinary là nhị phân khác nhau.

Vì vậy, cả hai đều có kích thước như nhau (2GB). Nhưng hãy lưu ý:

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

Mặc dù kết thúc của kiểu dữ liệu "hình ảnh" vẫn chưa được xác định, bạn nên sử dụng tương đương bằng chứng "tương lai".

Nhưng bạn phải tự hỏi: tại sao lại lưu trữ BLOBS trong một Cột?

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.