VarBinary เทียบกับ Image SQL Server Data Type เพื่อจัดเก็บข้อมูลไบนารี?


91

ฉันต้องการจัดเก็บไฟล์ไบนารีไว้ในฐานข้อมูล SQL Server ประเภทข้อมูลใดที่ดีกว่าจาก Varbinary และ Image

คำตอบ:


143

เนื่องจากรูปภาพเลิกใช้งานแล้วคุณควรใช้ varbinary

ต่อMicrosoft (ขอบคุณสำหรับลิงค์ @Christopher)

ชนิดข้อมูล ntext ข้อความและรูปภาพจะถูกลบออกใน Microsoft SQL Server เวอร์ชันอนาคต หลีกเลี่ยงการใช้ประเภทข้อมูลเหล่านี้ในงานพัฒนาใหม่และวางแผนที่จะแก้ไขแอปพลิเคชันที่ใช้อยู่ในปัจจุบัน ใช้ nvarchar (สูงสุด), varchar (สูงสุด) และ varbinary (สูงสุด) แทน

ประเภทข้อมูลคงที่และความยาวผันแปรสำหรับการจัดเก็บอักขระที่ไม่ใช่ Unicode และ Unicode ขนาดใหญ่และข้อมูลไบนารี ข้อมูล Unicode ใช้ชุดอักขระ UNICODE UCS-2


1
@ cmsjr: อาจเป็นเพราะตามที่ Microsoft กล่าวว่า: "ประเภทข้อมูลรูปภาพจะถูกลบออกใน Microsoft SQL Server เวอร์ชันอนาคต"
Ehsan

5
@Ehsan ฉันสามารถสันนิษฐานได้ว่าคุณไม่คุ้นเคยกับคำว่าเลิกใช้ โดยทั่วไปเมื่อคุณบอกว่ามีบางอย่างเลิกใช้งานคุณกำลังบอกว่าไม่ควรใช้เพราะกำลังจะถูกลบออกในอนาคต ดังนั้นโพสต์ของฉันและคำพูดที่คุณโพสต์ในความคิดเห็นของคุณจึงมีความหมายเหมือนกัน
cmsjr

ไม่ต้องกังวลคุณนำเสนอประเด็นที่ดี ฉันจะอัปเดตวลี
cmsjr

ฉันจะไม่เรียกสิ่งนี้ว่าคำตอบ "ลิงก์เท่านั้น" ฉันจะเรียกสิ่งนี้ว่า "คำตอบที่กระชับและถูกต้องสำหรับคำถามที่มีลิงก์ที่เป็นประโยชน์สำหรับผู้ที่ต้องการเรียนรู้เพิ่มเติม" คำตอบ
cmsjr

2
ฉันจะพูดตรงไปตรงมาและแจ้งให้คุณทราบว่าฉันไม่มั่นใจในการแก้ไขเพราะคุณเข้าหามันด้วยน้ำเสียงที่ไม่พอใจและคุกคาม บางทีมันอาจไม่ใช่เจตนาของคุณที่จะหยาบคาย แต่ดูเหมือนว่าคุณจะเป็นอย่างนั้นสำหรับฉัน ความหยาบคายมักจะทำให้ผู้คนเลิกสนใจแนวคิดดีๆ ฉันปรับปรุงเนื้อหาตามที่คุณแนะนำแล้ว แต่ฉันก็ขอให้คุณพิจารณาวิธีการนำเสนอข้อเสนอแนะของคุณด้วย
cmsjr


9

นอกจากนี้ยังมีสิ่งที่ค่อนข้างน่าสนใจFileStreamซึ่งเปิดตัวใน SQL Server 2008


1
spiffy: ฉลาดในรูปลักษณ์ ?
Liam

1
'ค่อนข้างเผ็ด' มีความหมายที่ค่อนข้างกว้างกว่า (มากกว่าแค่ 'spiffy') ในภาษาทั่วไป ... ฉันคิดว่าเหมาะที่สุด
Grantly

คำถามนี้เกี่ยวกับรูปแบบคอลัมน์และ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 (2,147,483,647) ไบต์ ยังคงรองรับการใช้ประเภทข้อมูลรูปภาพ แต่โปรดระวัง:

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

varbinary [(n | สูงสุด)]

ข้อมูลไบนารีความยาวตัวแปร n สามารถมีค่าตั้งแต่ 1 ถึง 8,000 สูงสุดระบุว่าขนาดพื้นที่จัดเก็บสูงสุดคือ 2 ^ 31-1 ไบต์ ขนาดพื้นที่จัดเก็บคือความยาวจริงของข้อมูลที่ป้อน + 2 ไบต์ ข้อมูลที่ป้อนอาจมีความยาว 0 ไบต์ คำพ้องความหมาย ANSI SQL สำหรับ varbinary นั้นแตกต่างกันแบบไบนารี

ดังนั้นทั้งสองจึงมีขนาดเท่ากัน (2GB) แต่ระวัง:

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-server

แม้ว่าจะยังไม่ได้ระบุจุดสิ้นสุดของประเภทข้อมูล "รูปภาพ" แต่คุณควรใช้การพิสูจน์ "ในอนาคต" ที่เทียบเท่า

แต่คุณต้องถามตัวเองว่าทำไมต้องเก็บ BLOBS ในคอลัมน์?

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.