2011-01-03 15 views
6

मैं कुछ डेटा स्टोर करने के लिए SQLite का उपयोग कर रहा हूं। प्राथमिक डेटाबेस NAS (डेबियन लेनी, 2.6.15, armv4l) पर है क्योंकि NAS एक स्क्रिप्ट चलाता है जो हर दिन डेटा अपडेट करता है। एक ठेठ "tableX से * का चयन करें" इस तरह दिखता है:क्या SQLite वास्तव में क्रॉस-प्लेटफ़ॉर्म है?

2010-12-28|20|62.09|25170.0 
2010-12-28|21|49.28|23305.7 
2010-12-28|22|48.51|22051.1 
2010-12-28|23|47.17|21809.9 

जब मैं अपने मुख्य कंप्यूटर (मैक ओएस एक्स) के लिए डीबी कॉपी और एक ही SQL क्वेरी चलाने के लिए, उत्पादन होता है:

2010-12-28|20|1.08115035175016e-160|25170.0 
2010-12-28|21|2.39343503830763e-259|-9.25596535779558e+61 
2010-12-28|22|-1.02951149572792e-86|1.90359837597183e+185 
2010-12-28|23|-1.10707273937033e-234|-2.35343828462275e-185 

तीसरे और चौथे कॉलम में वास्तविक प्रकार है। दिलचस्प तथ्य: जब संख्या पूर्णांक होती है (यानी वे ".0" के साथ समाप्त होते हैं), दो डेटाबेस के बीच कोई अंतर नहीं होता है। अन्य सभी मामलों में, मतभेद हैं ... एचएम ... आश्चर्यजनक? मुझे एक पैटर्न नहीं मिल रहा है।

अगर किसी के पास कोई सुराग है - कृपया साझा करें!

पुनश्च: sqlite3 -संस्करण उत्पादन डेबियन: 3.6.21 (लेनी-backports) मैक ओएस एक्स: 3.6.12 (10,6)

+1

का उपयोग कर रहा हूं, मुझे पैटर्न भी नहीं मिल रहा है। यह बाइट-स्वैपिंग नहीं है। – dan04

उत्तर

3

रिलीज में 3.4.0 SQLite के एक संकलन समय ध्वज जोड़ा गया था।

  • जोड़ा गया SQLITE_MIXED_ENDIAN_64BIT_FLOAT संकलन समय नासमझ endianness साथ ARM7 प्रोसेसर का समर्थन करने के लिए विकल्प।

मैं एक Arm920Tid डिवाइस और मेरी 86 आधारित वी एम के साथ इस एक ही समस्या हो रही थी। हाथ डिवाइस डेटा लिख ​​रहा था, और मैं इसे x86 वीएम (या मेरे मैक पर) पढ़ने की कोशिश कर रहा था।

मेरी बांह निर्माण के लिए मेरे मेकफ़ाइल में इस संकलन समय ध्वज को जोड़ने के बाद, जब मैं किसी भी प्लेटफॉर्म पर डीबी पूछता हूं तो मैं सौम्य मूल्य प्राप्त करने में सक्षम था।

संदर्भ के लिए मैं एसक्लाइट 3.7.14

+0

ग्रेट, वास्तव में काम किया! – pruefsumme

2

यह होना चाहिए, file format का कहना है कि असली big- में संग्रहित है एंडियन प्रारूप, जो आर्किटेक्चर-इनवेरिएंट होगा यदि दोनों बिल्डों द्वारा सही ढंग से क्रमबद्ध किया गया हो।

डेटाबेस रिकॉर्ड हेडर के भीतर संग्रहीत 7 का मान इंगित करता है कि संबंधित डेटाबेस मान एक SQL वास्तविक (फ़्लोटिंग पॉइंट नंबर) है। इस मामले में डेटा के ब्लॉब में 8-बाइट आईईईई फ़्लोटिंग पॉइंट नंबर, बिग-एंडियन बाइट ऑर्डर में संग्रहीत है।

+0

मुझे राहत मिली है कि यह * क्रॉस-प्लेटफार्म होना चाहिए लेकिन मुझे आश्चर्य है कि मेरे एसक्लाइट डीबी में इन मतभेदों का कारण क्या है। – pruefsumme

+2

शायद कार्यान्वयन में एक बग। –

संबंधित मुद्दे