SQLite में निम्न कथन सफल होगा और स्ट्रिंग को उस SALARY
कॉलम में डाला / अपडेट किया जाएगा जो टाइप का है INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
ध्यान दें कि शून्य डाला नहीं जाएगा / अपडेट नहीं किया जाएगा लेकिन वास्तविक "TOU MUCH" स्ट्रिंग है, इसलिए यह ऑर्टोमेटिक प्रकार के रूपांतरण के बारे में नहीं है।
सामान्य प्रश्न:
यह एक सुविधा है , बग नहीं है। SQLite डायनामिक टाइपिंग का उपयोग करता है। यह डेटा प्रकार की बाधाओं को लागू नहीं करता है। किसी भी प्रकार का डेटा (आमतौर पर) किसी भी कॉलम में डाला जा सकता है। आप पूर्णांक स्तंभों में मनमाने ढंग से लंबाई के तार लगा सकते हैं, बूलियन कॉलम में फ्लोटिंग पॉइंट नंबर या चरित्र स्तंभों में दिनांक। आप जिस डेटा को क्रिएट टेबल कमांड में एक कॉलम पर असाइन करते हैं, वह उस कॉलम में क्या डेटा रखा जा सकता है, इसे प्रतिबंधित नहीं करता है। हर स्तंभ एक मनमाना लंबाई स्ट्रिंग धारण करने में सक्षम है। (एक अपवाद है: INTEGER PRIMARY KEY के प्रकार के कॉलम में केवल 64-बिट हस्ताक्षरित पूर्णांक हो सकता है। यदि आप किसी पूर्णांक के अलावा कुछ भी एक पूर्णांक कुंजी स्तंभ में रखने का प्रयास करते हैं तो एक त्रुटि होगी।)
तो यह व्यवहार स्पष्ट रूप से जानबूझकर है, फिर भी मुझे आश्चर्य है कि SQLite के पास यह व्यवहार क्यों है, क्योंकि अधिकांश अन्य SQL डेटाबेस के बारे में मुझे काफी भिन्न व्यवहार के बारे में पता है, वे एक त्रुटि को बढ़ाएंगे, या स्ट्रिंग 0 में परिवर्तित करेंगे, जब गैर-संख्यात्मक स्ट्रिंग डालने की कोशिश करेंगे एक संख्यात्मक कॉलम।
क्या इस व्यवहार के बिना SQLite लाइब्रेरी कम उपयोगी होगी?
क्या यह पुस्तकालय को छोटा और तेज रखने के लिए डिज़ाइन द्वारा बनाया गया है?
जब एक संख्यात्मक स्तंभ में एक स्ट्रिंग डालने की कोशिश कर रहे हैं, तो त्रुटियों को बढ़ाने के लिए SQLite पुस्तकालय काफी धीमा या बड़ा होगा?