2008-10-14 4 views
5

यदि मैं SQLite डेटाबेस में 20 अंकों की प्राथमिक कुंजी के साथ डेटा डालने का प्रयास करता हूं तो मुझे दूसरे सम्मिलन कथन के साथ एक त्रुटि मिलती है क्योंकि यह "अद्वितीय नहीं है"। यदि मैं मानों का चयन करता हूं तो मैं SQLite कमांडप्रोप्ट से देख सकता हूं कि प्राथमिक कुंजी वैज्ञानिक नोटेशन में लिखी गई है। कॉलम प्रकार दशमलव है। क्या एसक्यूएलएट को "वे हैं" मानों को सम्मिलित करने के लिए एक तरीका है जो परिशुद्धता/"सामान्य प्रतिनिधित्व" को लंबे समय तक मानों के साथ रखते हैं?विशाल (20 अंक) प्राथमिक कुंजी और SQLite

उत्तर

4

इसे 'स्ट्रिंग' के रूप में डालें, संख्या नहीं।

+0

ठीक है, मुझे कॉलम को टेक्स्ट के रूप में परिभाषित करना था और उद्धृत मान डालना था। मुझे लगता है कि यह SQLite के प्रकार-एफ़िनिटी – tobsen

+0

स्टीव की वजह से है, जो * इतना * ठंडा है। मुझे वह याद रखना है। –

3

प्राथमिक कुंजी फ़ील्ड एक पूर्णांक होना चाहिए, सबसे बड़ा मान 9223372036854775807 है। एक अलग (अनुक्रमित) फ़ील्ड का उपयोग करें, और मान को स्ट्रिंग के रूप में डालें।

+6

SQLite में प्राथमिक कुंजी पूर्णांक होने की आवश्यकता नहीं है। पंक्तिबद्ध 64-बिट पूर्णांक है, लेकिन यह एक अलग मामला पूरी तरह से है। प्राथमिक कुंजी आपके इच्छित डेटा प्रकार हो सकती है। विवरण के लिए यहां देखें: http://www.sqlite.org/autoinc.html –

0

अजीब, आपके रैपर की तरह लगता है कि यह संख्या एक फ्लोट के रूप में रख रही है। मैंने सोचा कि डेसिमल को आंतरिक रूप से पूर्णांक में मैप किया गया था। एक स्ट्रिंग का उपयोग करना काम करेगा लेकिन int की बजाय स्ट्रिंग के अनुक्रमण के लिए धीमा हो सकता है।

+0

डेसिमल में संख्यात्मक संबंध है। इसका मतलब यह है कि किसी भी डेटा प्रकार को संग्रहीत किया जा सकता है, लेकिन यदि संभव हो तो तारों को INTEGER या REAL में परिवर्तित कर दिया जाता है। ओपी ने शायद 'इंटेग्रर प्राथमिक कुंजी' कॉलम घोषित किया है, जो * * को 64-बिट हस्ताक्षरित पूर्णांक की आवश्यकता होती है। – dan04