तालिका कॉलम के लिए उचित डेटा प्रकार चुनना एक महत्वपूर्ण निर्णय है। यह डेटा प्रकार रूपांतरणों की आवश्यकता को कम करता है, डेटाबेस प्रश्नों के प्रदर्शन को बढ़ाता है, और भंडारण आवश्यकताओं को कम करता है।
इस गाइड में, आप विभिन्न डेटा प्रकारों का पता लगाते हैं जो रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) में उपयोग किए जाते हैं। इन डेटा प्रकारों का उपयोग तालिका बनाते या बदलते समय, या डेटाबेस संग्रहीत प्रक्रियाओं में चर घोषित करते समय किया जा सकता है। कुछ प्रसिद्ध RDBMS MySQL और PostgreSQL हैं।
SQL बाइनरी डेटा प्रकार
बाइनरी डेटा स्टोर करने के लिए (0
या 1
), आप BINARY
. का उपयोग करते हैं और VARBINARY
डेटा के प्रकार। BINARY
डेटा प्रकार फिक्स्ड-लेंथ बाइनरी डेटा को स्टोर करता है, जबकि VARBINARY
चर-लंबाई बाइनरी डेटा संग्रहीत करता है। इन दोनों डेटा प्रकारों का उपयोग बिट्स के स्ट्रिंग्स को स्टोर करने के लिए किया जाता है (0
और 1
'एस)। उनके मान हेक्साडेसिमल प्रतिनिधित्व का उपयोग करके असाइन और पुनर्प्राप्त किए जाते हैं, जो 0x
के उपसर्ग द्वारा इंगित किया जाता है . BINARY
. दोनों के कॉलम (या वेरिएबल) और VarBinary
डेटा प्रकार का उपयोग छवि फ़ाइलों की सामग्री जैसे JPEG, BMP, दस्तावेज़ फ़ाइलों आदि को संग्रहीत करने के लिए किया जाता है।
उदाहरण के लिए, 63
. के दशमलव मान के लिए , इसका हेक्साडेसिमल मान 0x3F
. द्वारा दर्शाया जाता है और इसका बाइनरी बिट स्ट्रिंग समतुल्य है 111111
. इन बाइनरी स्ट्रिंग्स के मूल्य और उन्हें कैसे संग्रहीत किया जाता है, इसे समझने के लिए, नीचे दिए गए उदाहरण पर विचार करें:
नोट जब तक अन्यथा उल्लेख न किया गया हो, इस गाइड में प्रदर्शित सभी डेटाबेस कमांड MySQL . दोनों पर अच्छी तरह से काम करते हैं और PostgreSQL .
-
कमांड लाइन से,
BinaryExample
. नामक एक टेबल बनाएं जैसा कि नीचे दिखाया गया है:CREATE TABLE BinaryExample ( BinaryCol BINARY (10), VarBinaryCol VARBINARY (10) );
-
BinaryExample
. में एक पंक्ति डालें तालिका:INSERT INTO BinaryExample (BinaryCol, VarBinaryCol) VALUES (0x4D7953514C, 0x39274D);
-
BinaryExample
. से डेटा चुनें तालिका:SELECT BinaryCol, VarBinaryCol FROM BinaryExample;
आउटपुट इस प्रकार दिखता है:
+------------------------+----------------------------+ | BinaryCol | VarBinaryCol | +------------------------+----------------------------+ | 0x4D7953514C0000000000 | 0x39274D | +------------------------+----------------------------+
जैसा कि आप देख सकते हैं, BinaryCol
डेटा को अनुगामी शून्य के साथ अधिकतम कॉलम आकार में गद्देदार किया जाता है, लेकिन VarBinaryCol
डेटा कॉलम नहीं है। ऐसा इसलिए है क्योंकि VarBinaryCol
. के कॉलम चर लंबाई के रूप में परिभाषित हैं।
नोट बाइनरी और वरबाइनरी डेटा प्रकारों का अधिकतम आकार (लंबाई) डेटाबेस कार्यान्वयन के आधार पर भिन्न होता है। वे आम तौर पर काफी बड़े होते हैं (8,000 बाइट्स से अधिक)। कुछ डेटाबेस कार्यान्वयन में इन मुख्य डेटा प्रकारों के बाइनरी एक्सटेंशन होते हैं जो डेटा को मल्टी-गीगाबाइट्स के आकार में संग्रहीत कर सकते हैं।
SQL संख्यात्मक डेटा प्रकार
उपलब्ध संख्यात्मक डेटा प्रकारों को निम्नलिखित समूहों में विभाजित किया जा सकता है:पूर्णांक संख्यात्मक डेटा प्रकार, सटीक संख्यात्मक डेटा प्रकार और अनुमानित संख्यात्मक डेटा प्रकार। नीचे दिए गए अनुभाग प्रत्येक समूह पर चर्चा करते हैं।
पूर्णांक संख्यात्मक डेटा प्रकार
पूर्णांक डेटा प्रकार अहस्ताक्षरित और हस्ताक्षरित हो सकते हैं। अहस्ताक्षरित केवल शून्य और धनात्मक संख्याओं को संग्रहीत कर सकता है, जबकि हस्ताक्षरित शून्य, धनात्मक और ऋणात्मक संख्याओं की अनुमति देता है।
अधिकांश SQL कार्यान्वयन INT
के पूर्णांक डेटा प्रकारों का समर्थन करते हैं , SMALLINT
, और TINYINT
सकारात्मक और नकारात्मक पूर्णांकों के भंडारण के लिए। आपके द्वारा चुना गया पूर्णांक संख्यात्मक डेटा प्रकार उन मानों की श्रेणी पर निर्भर करता है जिन्हें आपको संग्रहीत करने की आवश्यकता है।
निम्न तालिका पूर्णांक संख्यात्मक डेटा प्रकारों और उनके न्यूनतम और अधिकतम हस्ताक्षरित मानों के लिए बाइट्स में अनुमत संग्रहण प्रदर्शित करती है।
Type | <वें शैली =पाठ-संरेखण:केंद्र> संग्रहण (बाइट्स) <वें शैली=पाठ्य-संरेखण:केंद्र>न्यूनतम मूल्य हस्ताक्षरित <वें शैली=पाठ्य-संरेखण:केंद्र>अधिकतम मूल्य पर हस्ताक्षर किए गए|||
---|---|---|---|
INT | 4 | माइनस 2^31 (-2147483648) | प्लस 2^31 (2147483647) |
SMALLINT | 2 | माइनस 2^15 (-32768) | प्लस 2^15 (32767) |
TINYINT | 1 | -128 | 127 |
नीचे दिया गया उदाहरण NumericExample
नामक तालिका का उपयोग करके पूर्णांक संख्यात्मक डेटा प्रकारों के न्यूनतम और अधिकतम हस्ताक्षरित मानों को प्रदर्शित करता है। ।
-
कमांड लाइन से,
NumericExample
. बनाएं टेबल।CREATE TABLE NumericExample ( IntColumn INT, SmallIntColumn SMALLINT, TinyIntColumn TINYINT );
-
NumericExample
. में निम्न मान डालें टेबल।INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn) VALUES (3258594758, 32767, 255);
जब आप उपरोक्त आदेश निष्पादित करते हैं तो आपको एक
Out of range
. मिलता है त्रुटि जैसा कि नीचे आउटपुट में दिखाया गया है। आप मान नहीं डाल सकते3258594758
और255
करने के लिएIntColumn
औरTinyIntColumn
क्रमश। ऐसा इसलिए है क्योंकि एक पूर्णांक डेटा प्रकार के लिए अधिकतम हस्ताक्षरित मान2147483647
. है और एक TinyInt का127
है ।ERROR 1264 (22003): Out of range value for column 'IntColumn' at row 1
-
IntColumn
. के मान अपडेट करें औरTinyIntColumn
कॉलम औरINSERT
को फिर से चलाएँ आदेश।INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn) VALUES (2147483647, 32767, 127);
-
SELECT
. का उपयोग करके स्तंभ मान प्राप्त करें कथन:SELECT IntColumn, SmallIntColumn, TinyIntColumn FROM NumericExample;
आउटपुट नीचे दिए गए उदाहरण जैसा दिखता है:
+------------+----------------+---------------+ | IntColumn | SmallIntColumn | TinyIntColumn | +------------+----------------+---------------+ | 2147483647 | 32767 | 127 | +------------+----------------+---------------+
दशमलव संख्यात्मक डेटा प्रकार (सटीक संख्यात्मक)
दशमलव डेटा प्रकार, DECIMAL
और NUMERIC
, सटीक और निश्चित संख्यात्मक मान संग्रहीत करें। इन डेटा प्रकारों को सटीक संख्यात्मक . के रूप में भी जाना जाता है डेटा के प्रकार। वे दशमलव बिंदु के बाईं ओर एक पूर्णांक मान और दशमलव बिंदु के दाईं ओर एक भिन्नात्मक मान संग्रहीत करते हैं। वे समान भंडारण आवश्यकताओं के साथ कार्यात्मक रूप से समकक्ष हैं। इन प्रकारों के लिए उपयोग किया जाने वाला भंडारण निर्दिष्ट परिशुद्धता और श्रेणियों पर निर्भर करता है। वे 2 बाइट्स से लेकर 17 बाइट्स तक हो सकते हैं, और उनके मान -10^38 +1
. से हो सकते हैं से +10^38 -1
।
इन दो डेटा प्रकारों को परिशुद्धता . द्वारा परिभाषित किया गया है और एक पैमाना . परिशुद्धता दशमलव बिंदु के बाएँ और दाएँ स्थानों की संख्या को जोड़ती है, जबकि स्केल दशमलव बिंदु के दाईं ओर अंकों की कुल संख्या को दर्शाता है। ये दो डेटा प्रकार निम्नलिखित सिंटैक्स का उपयोग करके बनाए गए हैं:
DECIMAL(precision, scale)
या
NUMERIC(precision,scale)
नीचे दिया गया उदाहरण दर्शाता है कि दशमलव संख्यात्मक डेटा प्रकार कैसे बनाया और उपयोग किया जाता है।
-
कमांड लाइन से,
ExactNumericExample
. बनाएं टेबल।CREATE TABLE ExactNumericExample ( DecimalCol DECIMAL(5,2), NumericCol NUMERIC(7,2) );
-
ExactNumericExample
. में निम्न मान डालें टेबल।INSERT INTO ExactNumericExample (DecimalCol, NumericCol) VALUES (123.45, 12345.67);
-
SELECT
. का उपयोग करके स्तंभ मान प्राप्त करें कथन:SELECT DecimalCol, NumericCol FROM ExactNumericExample;
आउटपुट निम्न के जैसा होता है:
+------------+------------+ | DecimalCol | NumericCol | +------------+------------+ | 123.45 | 12345.67 | +------------+------------+
फ़्लोटिंग पॉइंट न्यूमेरिक डेटा प्रकार (अनुमानित संख्यात्मक)
फ़्लोटिंग पॉइंट संख्यात्मक डेटा प्रकार हैं FLOAT
और REAL
. उन्हें अनुमानित अंक . भी कहा जाता है डेटा के प्रकार। फ्लोटिंग पॉइंट डेटा के बाइनरी प्रतिनिधित्व के कारण ये डेटा प्रकार अनुमानित मूल्य संग्रहीत करते हैं। फ्लोटिंग पॉइंट कॉलम या वेरिएबल बनाने का सिंटैक्स निम्नलिखित है:
Float(N)
पैरामीटर N
इंगित करता है कि फ़ील्ड को चार या आठ बाइट्स रखना चाहिए या नहीं। N
. का मान सात से अधिक के लिए आठ बाइट्स की आवश्यकता होती है; सात या उससे कम के लिए चार बाइट्स की आवश्यकता होती है। इस डेटा प्रकार के लिए फ़्लोटिंग परिशुद्धता -1.79E + 308
. से होती है से 1.79E + 308
।
इसी तरह, एक कॉलम और वेरिएबल को डेटा प्रकार REAL
. के रूप में परिभाषित किया गया है भंडारण के चार बाइट लेता है, और -3.40E + 38
. से कई मान प्रदान करता है से 3.40E + 38
।
SQL कैरेक्टर डेटा प्रकार
डेटा प्रकार CHAR
और VARCHAR
वर्ण डेटा को लंबाई में 8,000 बाइट्स तक संग्रहीत करने के लिए उपयोग किया जाता है। ये दोनों डेटा प्रकार स्ट्रिंग मानों को डेटाबेस कॉलम में संग्रहीत करते हैं, लेकिन वे इस बात में भिन्न होते हैं कि उनके मान कैसे संग्रहीत और पुनर्प्राप्त किए जाते हैं। CHAR
. की लंबाई डेटा प्रकार अपनी निर्दिष्ट लंबाई पर स्थिर रहता है चाहे उस आवंटन स्थान का उपयोग किया गया हो या नहीं। यदि स्थान का उपयोग नहीं किया जाता है, तो स्तंभ या चर अतिरिक्त रिक्त स्थान के साथ गद्देदार होते हैं। VARCHAR
बिना किसी अतिरिक्त रिक्त स्थान के मान को वैसे ही आउटपुट करता है जैसे वह है।
नीचे दिया गया उदाहरण वर्ण डेटा प्रकार को दर्शाता है।
-
कमांड लाइन से,
Employee
बनाएं टेबल।CREATE TABLE Employee ( LastName VARCHAR(25), FirstName VARCHAR(20), Sex CHAR(1) );
-
Employee
में निम्नलिखित मान डालें:टेबल।INSERT INTO Employee (LastName, FirstName, Sex) VALUES ('Jones', 'Mary', 'F');
-
SELECT
. का उपयोग करके स्तंभ मान प्राप्त करें कथन:SELECT LastName, FirstName, Sex FROM Employee;
आउटपुट निम्न चाहेंगे:
+----------+-----------+------+ | LastName | FirstName | Sex | +----------+-----------+------+ | Jones | Mary | F | +----------+-----------+------+
कॉलम LastName
और Firstname
घोषित प्रकार Varchar
. हैं . यह नामों को डेटा प्रकार की परिभाषा तक लंबे समय तक रहने की अनुमति देता है। लेकिन निर्दिष्ट अधिकतम से छोटे नामों के लिए, इन स्तंभों के डेटा में कोई रिक्त स्थान नहीं जोड़ा गया है।
SQL दिनांक और समय डेटा प्रकार
DATETIME
डेटा प्रकार का उपयोग डेटाबेस में दिनांक और समय मानों को संग्रहीत करने के लिए किया जाता है। DATETIME
. के लिए मान डेटा प्रकार दिनांक भाग के लिए भंडारण के चार बाइट्स और समय भाग के लिए चार बाइट्स का उपयोग करता है। इस डेटा प्रकार का समय भाग मध्यरात्रि के बाद मिलीसेकंड की संख्या तक ग्रैन्युलैरिटी के साथ समय निर्दिष्ट करता है। इस डेटा प्रकार की सटीकता 3.33 मिलीसेकंड की सटीकता के साथ "1 जनवरी, 1753" से "दिसंबर 31, 9999" तक होती है।
नोट यदि आप किसी DATETIME
. को केवल दिनांक मान निर्दिष्ट करते हैं डेटा प्रकार कॉलम या चर, समय भाग डिफ़ॉल्ट रूप से मध्यरात्रि तक होता है।
नीचे दिया गया उदाहरण DATETIME
को दर्शाता है डेटा प्रकार।
DELIMITER //
CREATE PROCEDURE Datetimedemo()
BEGIN
DECLARE BirthDate DATETIME
SET BirthDate = '1990-01-01 09:00:00'
SELECT BirthDate
END//
DELIMITER ;
call Datetimedemo;
आउटपुट निम्न के जैसा होता है:
+----------+-----------+
| BirthDate |
+----------+-----------+
| 1990-01-01 09:00:00 |
+----------+-----------+
नोट कुछ SQL कार्यान्वयन अतिरिक्त डेटा प्रकारों का समर्थन करते हैं, जो या तो एक उपसमुच्चय, सुपरसेट या उपरोक्त सभी निर्दिष्ट डेटा प्रकारों के प्रकार हैं।
SQL डेटा प्रकार के विचार
डेटाबेस डिज़ाइन करते समय, तालिका कॉलम और संग्रहीत कार्यविधि चर के लिए उपयुक्त डेटा प्रकारों का सावधानीपूर्वक चयन करना अत्यंत महत्वपूर्ण है।
किए गए विकल्पों का भंडारण दक्षता और समग्र डेटाबेस प्रदर्शन पर महत्वपूर्ण प्रभाव पड़ सकता है। किसी व्यक्ति की Age
. को परिभाषित करना एक सरल उदाहरण है Tinyint
. का कॉलम होना चाहिए Int
. के विपरीत डेटा प्रकार डेटा प्रकार। यह निम्नलिखित कारणों से है:
- जैसा कि पहले उल्लेख किया गया है,
Tinyint
डेटा प्रकारों मेंInt
. की संग्रहण आवश्यकताएं होती हैं डेटा प्रकार। - एक
Tinyint
की पुनर्प्राप्ति दक्षता कॉलम बनाम एकInt
कॉलम बहुत बड़ा है।
सतह पर, यह एक बड़ी चिंता का विषय नहीं लग सकता है। लेकिन, यदि प्रभावित तालिका में लाखों पंक्तियाँ हैं, तो भंडारण और प्रदर्शन क्षमता दोनों निश्चित रूप से प्राप्त की जा सकती हैं। यदि आप इस डिज़ाइन मानदंड को पूरे डेटाबेस में विस्तारित करते हैं, तो आप परिमाण के क्रम से इन दक्षताओं को उत्पन्न कर सकते हैं।
डेटाबेस डेटा प्रकार चयन में आवश्यक डिज़ाइन समय खर्च करने से विभिन्न डेटा प्रकारों के कॉलम की तुलना करते समय, क्वेरी और संग्रहीत प्रक्रिया तर्क में महंगे प्रकार के रूपांतरण करने की आवश्यकता को संभावित रूप से कम किया जा सकता है।
उदाहरण के लिए, एक टेबल में, आप एक तारीख को Varchar(20)
. में स्टोर करते हैं कॉलम, और दूसरी तालिका में आप एक दिनांक को Datetime
. में संग्रहीत करते हैं कॉलम। यदि आपको दो स्तंभों की तुलना करने की आवश्यकता है, तो आपको दो स्तंभों में से किसी एक पर क्वेरी में डेटा प्रकार रूपांतरण फ़ंक्शन का उपयोग करना चाहिए। यह एक महंगा ऑपरेशन है।
निष्कर्ष
SQL डेटा प्रकार डेटाबेस कॉलम और वेरिएबल्स से जुड़ी विशेषताएँ हैं। ये विशेषताएँ बाइनरी, न्यूमेरिक, कैरेक्टर और दिनांक/समय होने का रूप ले सकती हैं। भंडारण और क्वेरी निष्पादन दक्षता दोनों को सुनिश्चित करने के लिए कॉलम और चर को सही डेटा प्रकार के साथ परिभाषित करने के लिए सावधानीपूर्वक डिज़ाइन समय आवश्यक है।