7

SQL सर्वर 2008 R2 में varbinary (max) का उपयोग करके फ़ाइल का अधिकतम आकार क्या है? मैंने कॉलम में अधिकतम मूल्य 8,000 बाइट्स में बदलने की कोशिश की लेकिन यह मुझे नहीं जाने देगी, इसलिए मैं अनुमान लगा रहा हूं कि अधिकतम 8,000 बाइट्स है, लेकिन this article on MSDN से, यह कहता है कि अधिकतम संग्रहण आकार 2^31- 1 बाइट:एसक्यूएल सर्वर 2008 आर 2 वर्बिनरी मैक्स साइज

varbinary [(n | अधिकतम)]

चर लंबाई बाइनरी डेटा। एन 1 से 8,000 का मूल्य हो सकता है। अधिकतम इंगित करता है कि अधिकतम संग्रहण आकार 2^31-1 बाइट है। भंडारण आकार + 2 बाइट दर्ज किए गए डेटा की वास्तविक लंबाई है। दर्ज किया गया डेटा लंबाई में 0 बाइट्स हो सकता है। varbinaryबाइनरी भिन्न के लिए एएनएसआई एसक्यूएल समानार्थी है।

तो मैं एक varbinary फ़ील्ड में बड़ी फ़ाइलों को कैसे स्टोर कर सकता हूं? मैं एक FILESTREAM का उपयोग कर के बाद से फ़ाइलें मैं सहेजना चाहते 1mb अधिकतम 200kb से कर रहे हैं, कोड मैं उपयोग कर रहा हूँ नहीं पर विचार कर रहा हूँ:

UPDATE [table] 
SET file = (SELECT * FROM OPENROWSET (BULK 'C:\A directory\A file.ext', SINGLE BLOB) alias) 
WHERE idRow = 1 

मैं या उससे कम फ़ाइलों को सफलतापूर्वक कि कोड निष्पादित करने में सक्षम बराबर कर दिया गया है 8000 बाइट से अधिक। अगर मैं फ़ाइल 8001 बाइट्स आकार के साथ प्रयास करता हूं तो यह असफल हो जाएगा। तालिका में मेरे फ़ाइल फ़ील्ड में "फ़ाइल" प्रकार varbinary(8000) नामक फ़ील्ड है, जैसा कि मैंने कहा था, मैं एक बड़े मूल्य में नहीं बदल सकता।

+1

आपने कैसे प्रयास किया? क्या आप वह कोड दिखा सकते हैं जिसका उपयोग आप इसे करने के लिए करते थे और तालिका के लिए तालिका तालिका बनाते हैं? इसके अलावा 'nvarbinary' जैसी कोई चीज़ नहीं है। –

+0

क्षमा करें मेरा मतलब varbinary (अधिकतम) है, मैंने जो कोड इस्तेमाल किया है उसे भी जोड़ा है, आपको बहुत धन्यवाद –

+0

क्या आपने संगतता मोड सेटिंग्स की जांच की है? –

उत्तर

15

मैं इस परिदृश्य को पुन: उत्पन्न नहीं कर सकता। इस 8K पर सीमित कर दिया हो रही है, तो

-------- 
39578 

तो मुझे लगता है कि होता है कि या तो निम्न में से एक सत्य है:: मैंने कोशिश की है:

USE tempdb; 
GO 

CREATE TABLE dbo.blob(col VARBINARY(MAX)); 

INSERT dbo.blob(col) SELECT NULL; 

UPDATE dbo.blob 
    SET col = (SELECT BulkColumn 
    FROM OPENROWSET(BULK 'C:\Folder\File.docx', SINGLE_BLOB) alias 
); 

SELECT DATALENGTH(col) FROM dbo.blob; 

परिणाम

  1. स्तंभ वास्तव में VARBINARY(8000) है।

  2. आप प्रबंधन स्टूडियो में डेटा का चयन कर रहे हैं, और वहां प्रदर्शित डेटा की लंबाई का विश्लेषण कर रहे हैं। पाठ के परिणामों में यह अधिकतम 8192 वर्णों तक सीमित है, यदि ऐसा है, तो कॉलम के खिलाफ सीधे DATALENGTH() का उपयोग करना एक बेहतर तरीका है।

1

मैं, कहते हैं कि यहां से निम्न बड़ा 1 MB से के आधार पर फ़ाइलों के लिए फ़ाइल धारा का उपयोग करने की हिम्मत होगा: MS TechNet | FILESTREAM Overview

एसक्यूएल सर्वर में, BLOBs मानक varbinary(max) डेटा कि टेबलों में डेटा, या FILESTREAM varbinary(max) वस्तुओं है कि फाइल सिस्टम में डाटा स्टोर संग्रहीत करता है हो सकता है। डेटा का आकार और उपयोग निर्धारित करता है कि आपको डेटाबेस संग्रहण या फ़ाइल सिस्टम संग्रहण का उपयोग करना चाहिए या नहीं। निम्न स्थितियाँ सत्य हैं, तो आप FILESTREAM उपयोग करने पर विचार करना चाहिए: 1 MB से बड़े

  • वस्तुओं कि संगृहीत किए जा रहे हैं, औसतन,।
  • फास्ट रीड एक्सेस महत्वपूर्ण है।
  • आप ऐसे अनुप्रयोग विकसित कर रहे हैं जो एप्लिकेशन तर्क के लिए मध्यम स्तर का उपयोग करते हैं।

छोटी वस्तुओं के लिए, डेटाबेस में varbinary(max) BLOBs भंडारण अक्सर बेहतर स्ट्रीमिंग का प्रदर्शन प्रदान करता है।

1

"सेट TEXTSIZE" varchar(max), nvarchar(max), varbinary(max), text, ntext, और छवि एक SELECT बयान से दिए गए डेटा के आकार निर्दिष्ट करता है।

select @@TEXTSIZE 

एसक्यूएल सर्वर मूल क्लाइंट ODBC ड्राइवर और SQL सर्वर के लिए एसक्यूएल सर्वर मूल क्लाइंट OLE DB प्रदाता स्वचालित रूप से कनेक्ट करते 2147483647 के करने के लिए TEXTSIZE निर्धारित किया है। SET TEXTSIZE के लिए अधिकतम सेटिंग बाइट्स में निर्दिष्ट 2 गीगाबाइट्स (GB) है। 0 की सेटिंग डिफ़ॉल्ट रूप से आकार को रीसेट करता है (4 केबी)।

जैसा कि बताया गया है, बड़ी फ़ाइलों के लिए आपको फ़ाइल स्ट्रीम पसंद करनी चाहिए।