2012-12-12 7 views
5

मेरे पास sqlite3 में डेटा प्रकारों के बारे में कोई प्रश्न है।SQLITE_INTEGER मान बाइट

SQLITE_INTEGER के एक मूल्य 1, 2, 3, 4, 6, या 8, मूल्य का परिमाण पर निर्भर करता है, तो मैं सिर्फ पता बाइट्स में संग्रहित किया जा सकता है कि SQLite डेटाबेस भंडार SQLITE_INTEGER में एक स्तंभ, मैं कैसे कर सकते हैं इस कॉलम में एक मान 4 बाइट्स या 6-8 बाइट्स पूर्णांक है, या मूल्य का उपयोग करने के लिए किस का उपयोग किया जाना चाहिए, sqlite3_column_int() या sqlite3_column_int64()?

क्या मैं इस मामले में sqlite3_column_bytes() का उपयोग कर सकता हूं? लेकिन दस्तावेज़ीकरण के अनुसार, sqlite3_column_bytes() मुख्य रूप से टेक्स्ट या बीएलओबी के लिए उपयोग किया जाता है।

धन्यवाद!

उत्तर

1

जब SQLite रिकॉर्ड में कदम उठाता है, तो सभी पूर्णांक मान 64 बिट्स तक विस्तारित होते हैं।
sqlite3_column_int() ओवरफ्लो की जांच किए बिना उस मूल्य के निचले 32 बिट्स लौटाता है।

जब आप sqlite3_column_bytes() पर कॉल करते हैं, तो SQLite मान को टेक्स्ट में परिवर्तित कर देगा, और वर्णों की संख्या वापस कर देगा।

आप यह नहीं जान सकते कि इसे पढ़ने से पहले एक पूर्णांक मान कितना बड़ा है। बाद में, आप उस मान के लिए सबसे छोटे संभव प्रारूप के लिए record format documentation में सूची देख सकते हैं, लेकिन यदि आप यह सुनिश्चित करना चाहते हैं कि पूर्णांक मान 32 बिट्स तक कभी नहीं छेड़छाड़ किए जाते हैं, तो आपको हमेशाsqlite3_column_int64() का उपयोग करें, या यह सुनिश्चित करें कि बड़े मूल्य पहली बार डीबी को कभी नहीं लिखा जाता है (यदि यह संभव है)।

+0

धन्यवाद! तो मुझे लगता है कि मुझे पहले sqlite3_column_int64() द्वारा मान प्राप्त करना होगा, और फिर इसे 32 बिट मान के दायरे में 32 बिट तक छोटा कर दें। कोई अन्य तरीका? – Lewis