SQL डेटा टाइप्स: शुरुआती लोगों के लिए आवश्यक मार्गदर्शिका
MySQL, PostgreSQL और SQL Server में SQL डेटा टाइप्स में महारत हासिल करें। प्रदर्शन और डेटा अखंडता को बेहतर बनाने के लिए सही संख्यात्मक, टेक्स्ट और दिनांक फ़ॉर्मेट चुनना सीखें।
जब आप पहली बार SQL के साथ काम करना शुरू करते हैं, तो डेटा टाइप्स को साधारण लेबल समझना आसान होता है। कोई भी कॉलम या तो संख्या, टेक्स्ट, तारीखें या विशेष डेटा टाइप्स रखता है। लेकिन डेटा टाइप केवल लेबल नहीं है—यह नियमों का एक समूह है जो परिभाषित करता है कि डेटाबेस की दृष्टि में कोई वैल्यू क्या है।
व्यवहार में, डेटा टाइप्स यह आकार देते हैं कि SQL आपके डेटाबेस की जानकारी को कैसे “समझता” है। ये निर्देशों का एक सेट है जो SQL को आपका डेटा सही तरह से पढ़ने, तुलना करने और प्रोसेस करने के लिए आवश्यक संदर्भ देता है।
इस ट्यूटोरियल में, हम प्रमुख SQL डेटा टाइप श्रेणियों को देखेंगे और जानेंगे कि वे अलग-अलग डेटाबेस मैनेजमेंट सिस्टम में कैसे बर्ताव करती हैं। मैं आपको उदाहरणों के साथ-साथ चलते रहने के लिए प्रोत्साहित करता/करती हूँ।
यदि आपने पहले डेटाबेस टेबल्स के साथ बहुत काम नहीं किया है, तो हमाराSQL Fundamentals पाठ्यक्रम ऐसे डाटासेट्स की संरचना समझने के लिए स्पष्ट, शुरुआती-अनुकूल नींव देता है।
SQL डेटा टाइप्स क्या होते हैं?
डेटा टाइप आपके डेटा के फ़ॉर्मेट का वर्णन करता है: कोई कॉलम किन प्रकार के मान रख सकता है, वे मान अंदरूनी तौर पर कैसे संग्रहीत होते हैं, और उन पर कौन-से ऑपरेशंस चलाना सार्थक है।
इसका मतलब है कि डेटा टाइप का चुनाव केवल टेबल डिज़ाइन से अधिक को प्रभावित करता है। यह स्टोरेज की ज़रूरतों, क्वेरी परफॉर्मेंस, सॉर्टिंग व्यवहार, गणितीय ऑपरेशंस, और यहाँ तक कि अलग-अलग सिस्टम एक ही वैल्यू की व्याख्या कैसे करते हैं—इन सब पर असर डाल सकता है।
यहाँ एक साधारण टेबल है जो एक साथ कई प्रकारों का उपयोग करती है:
CREATETABLE employees (
id INT,
name VARCHAR(50),
start_date DATE,
active BOOLEAN,
salary DECIMAL(10,2));संचालित द्वारा
इस टेबल में प्रत्येक कॉलम यह परिभाषित करता है कि वह किस प्रकार का डेटा रख सकता है।
id कॉलम पूर्णांक (whole numbers) स्टोर करेगा, जिससे प्रत्येक कर्मचारी को एक अद्वितीय आईडी मिलेगी।
name कॉलम अधिकतम 50 अक्षरों का टेक्स्ट रख सकता है, ताकि आप छोटे नाम संग्रहीत कर सकें।
start_date कॉलम कैलेंडर तिथियों के लिए है।
active कॉलम true या false मान रखेगा, जिससे यह ट्रैक करना आसान हो जाता है कि कौन-से कर्मचारी वर्तमान में सक्रिय हैं।
अंत में, salary कॉलम 10-अंकों की प्रिसिशन के साथ मौद्रिक राशियाँ स्टोर करेगा, जिसमें दशमलव के बाद सेंट्स के लिए दो अंक रखे जाएँगे।
मिलकर, ये कॉलम एक संरचित टेबल बनाते हैं जो प्रत्येक फ़ील्ड में अनुमत मानों के प्रकारों के बारे में नियम लागू करती है। इससे डेटा अधिक पूर्वानुमेय और काम करने में आसान बनता है।
आइए इसमें कुछ उदाहरण डेटा जोड़ते हैं और देखते हैं कि PostgreSQL का उपयोग करते हुए परिणामी टेबल कैसी दिख सकती है।
अलग-अलग डेटाबेस सिस्टम समान सिद्धांतों का पालन करते हैं, पर नामकरण और विशेषताओं में भिन्न होते हैं। उदाहरण के लिए, SQL Server BOOLEAN के बजाय BIT का उपयोग करता है, और MySQL BOOLEAN को एक छोटे पूर्णांक के रूप में मानता है।
SQL डेटा टाइप्स की श्रेणियाँ
डेटा टाइप्स की चार मुख्य श्रेणियाँ हैं: संख्यात्मक, अक्षरीय, दिनांक, और विशेष। आइए प्रत्येक को विस्तार से देखें।
संख्यात्मक डेटा टाइप्स
संख्यात्मक प्रकार पूर्णांक या दशमलव संख्याएँ स्टोर करते हैं। विशिष्ट संख्यात्मक प्रकार यह निर्धारित करेगा कि संग्रहीत संख्याओं की सीमा, प्रिसिशन और स्टोरेज आकार क्या होगा। इस श्रेणी में सबसे सामान्य डेटा टाइप्स हैं:
इंटीजर, जैसे INT, SMALLINT, और BIGINT, पूर्णांकों के लिए,
दशमलव, जैसे DECIMAL(p, s) और NUMERIC(p, s), सटीक दशमलव मानों के लिए,
और फ्लोट्स, जैसे FLOAT और DOUBLE, अनुमानित मानों के लिए जो छोटे राउंडिंग अंतर ला सकते हैं
विभिन्न संख्यात्मक डेटा टाइप्स दिखाने के लिए एक उदाहरण टेबल बनाते हैं:
जैसा कि आप देख सकते हैं, पहला कॉलम केवल पूर्णांक तक सीमित है, दूसरा कॉलम दशमलव बिंदु के बाद दो अंकों तक के दशमलव तक सीमित है, और तीसरा कॉलम अनिश्चित संख्या के अंकों वाले दशमलव रख सकता है।
पहली नज़र में, DECIMAL और FLOAT एक जैसे लग सकते हैं। लेकिन एक महत्वपूर्ण अंतर है: DECIMAL निर्दिष्ट दशमलव स्थानों के साथ सटीक संख्या संग्रहीत करता है, जबकि FLOAT एक अनुमानित मान रखता है जो सिस्टम के अनुसार थोड़ा भिन्न हो सकता है।
जब प्रिसिशन आवश्यक हो तो दशमलव का उपयोग करना महत्वपूर्ण है, और केवल तभी फ्लोट्स पर भरोसा करें जब छोटे राउंडिंग त्रुटियाँ स्वीकार्य हों।
श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
संख्यात्मक
INT, SMALLINT, BIGINT
विभिन्न आकार के पूर्णांक
1, 42, 1000
संख्यात्मक
DECIMAL(p,s), NUMERIC(p,s)
निश्चित प्रिसिशन वाले सटीक दशमलव मान
19.99, 250.56
संख्यात्मक
FLOAT, DOUBLE
अनुमानित दशमलव मान। छोटे राउंडिंग अंतर ला सकते हैं
3.1415, 2.71828
अक्षरीय और स्ट्रिंग डेटा टाइप्स
अक्षरीय प्रकार टेक्स्ट स्टोर करते हैं। प्रदर्शन और स्टोरेज दक्षता में भिन्नताओं के कारण इनके कुछ अलग प्रकार होते हैं।
CHAR(n) निश्चित-लंबाई वाले कैरेक्टर सेट्स के लिए है। यह ऐसे डेटा के लिए उपयोगी है जिसका आकार हमेशा समान होता है, जैसे राज्य कोड या हवाई अड्डे के संक्षिप्त रूप।
VARCHAR(n) परिवर्तनशील-लंबाई वाले कैरेक्टर सेट्स के लिए है। यह नाम, ईमेल पते और अन्य उपयोगकर्ता-प्रविष्ट टेक्स्ट के लिए उपयोगी है।
TEXT और समान प्रकार असंरचित टेक्स्ट के बड़े ब्लॉक्स के लिए उपयोग किए जाते हैं, जैसे ब्लॉग पोस्ट या उत्पाद विवरण।
कुछ सिस्टम, जैसे SQL Server, यूनिकोड स्ट्रिंग टाइप्स का भी समर्थन करते हैं, जैसे NCHAR और NVARCHAR, जो तब उपयोगी होते हैं जब आपके डेटा में विभिन्न लिपियों—जैसे लैटिन, चीनी या सिरिलिक—में टेक्स्ट शामिल हो।
श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
अक्षरीय / स्ट्रिंग
CHAR(n)
निश्चित-लंबाई का टेक्स्ट
'US', 'CA'
अक्षरीय / स्ट्रिंग
VARCHAR(n)
परिवर्तनशील-लंबाई का टेक्स्ट
'Alice Johnson', 'Bob Smith'
अक्षरीय / स्ट्रिंग
TEXT
असंरचित टेक्स्ट के बड़े ब्लॉक्स
'Preferred contact by email.', 'Requires invoice copy for each order.'
अक्षरीय / स्ट्रिंग
NCHAR(n), NVARCHAR(n)
निश्चित या परिवर्तनशील-लंबाई का यूनिकोड टेक्स्ट
'Å', 'É', 'München', 'São Paulo'
आइए एक उदाहरण टेबल के साथ देखें कि अलग-अलग स्ट्रिंग डेटा टाइप्स कैसे काम करते हैं:
CREATETABLE customers (
id INT,
country_code CHAR(2),
name VARCHAR(100),
notes TEXT);INSERTINTO customers VALUES(1,'US','Alice Johnson','Preferred contact by email.'),(2,'CA','Bob Smith','Requires invoice copy for each order.');SELECT*FROM customers;संचालित द्वारा
यहाँ देखें कि यह टेबल अंत में कैसी दिखेगी। आप प्रत्येक स्ट्रिंग डेटा टाइप में एन्कोड की गई लंबाई के अंतर देख सकते हैं।
id
country_code
name
notes
1
US
Alice Johnson
Preferred contact by email.
2
CA
Bob Smith
Requires invoice copy for each order.
यहाँ, CHAR(2) सुसंगत लंबाई लागू करता है, जबकि VARCHAR और TEXT अधिक लचीलापन देते हैं।
दिनांक और समय डेटा टाइप्स
दिनांक और समय डेटा टाइप्स समय-संबंधी जानकारी को सटीक रूप से स्टोर और क्वेरी करना संभव बनाते हैं। शुरुआती लोग सोच सकते हैं कि वे इस तरह की जानकारी को एन्कोड करने के लिए संख्यात्मक या स्ट्रिंग डेटा टाइप्स का उपयोग कर सकते हैं। हालाँकि, ऐसा करने से आगे चलकर डेटा विश्लेषण में समस्याएँ आ सकती हैं। किसी विशिष्ट कैलेंडर डेटा टाइप का उपयोग सब कुछ सुचारू बना सकता है।
सबसे सामान्य रूप से उपयोग किए जाने वाले तीन प्रकार हैं:
DATE, जो वर्ष, माह और दिन एन्कोड करता है,
TIME, जो घंटा, मिनट और सेकंड स्टोर करता है,
और DATETIME या TIMESTAMP, जो संयुक्त दिनांक और समय स्टोर करते हैं।
आधुनिक डेटाबेस आंशिक सेकंड या समय क्षेत्र–सचेत डेटा टाइप्स का भी समर्थन कर सकते हैं, जैसे PostgreSQL में TIMESTAMPTZ, जो टाइमस्टैम्प्स को UTC में स्टोर करता है और पुनर्प्राप्ति पर उन्हें स्वतः आपकी सत्र की समय क्षेत्र में कन्वर्ट करता है।
श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
दिनांक / समय
DATE
कैलेंडर तिथियाँ (वर्ष, माह, दिन)
'2025-11-26'
दिनांक / समय
TIME
दिन का समय (घंटा, मिनट, सेकंड)
'09:30:00', '18:45:30'
दिनांक / समय
DATETIME, TIMESTAMP
संयुक्त दिनांक और समय
'2025-11-20 14:15:00', '2025-11-21 09:00:00'
दिनांक / समय
TIMESTAMPTZ
समय क्षेत्र सहित संयुक्त दिनांक और समय (PostgreSQL)
'2025-11-21 09:00:00+00'
आइए एक साधारण टेबल बनाएँ ताकि इन समय-सम्बंधी डेटा टाइप्स को प्रदर्शित किया जा सके:
CREATETABLE events (
event_id INT,
event_date DATE,
start_time TIME,
created_at DATETIME);INSERTINTO events VALUES(1,'2025-11-26','09:30:00','2025-11-20 14:15:00'),(2,'2025-12-01','18:45:30','2025-11-21 09:00:00');SELECT*FROM events;संचालित द्वारा
यहाँ देखें कि टेबल कैसी दिखेगी:
event_id
event_date
start_time
created_at
1
2025-11-26
09:30:00
2025-11-20 14:15:00
2
2025-12-01
18:45:30
2025-11-21 09:00:00
आप देख सकते हैं कि सही दिनांक या टाइमस्टैम्प प्रकार चुनने से आप किस प्रकार का डेटा स्टोर कर सकते हैं, यह प्रभावित होता है।
बूलियन और अन्य विशेष डेटा टाइप्स
सभी प्रकार का डेटा पिछली श्रेणियों में ठीक-ठीक फिट नहीं होता। इनके लिए, SQL विशेष उपयोग-केसों हेतु कुछ खास प्रकार शामिल करता है। जिनमें से कुछ सामान्य प्रकार जो आप देख सकते हैं, वे हैं:
बूलियन मान (BOOLEAN, BOOL, या BIT, सिस्टम के अनुसार) true या false रिकॉर्ड करने के लिए,
बाइनरी डेटा (BLOB) छवियों, फ़ाइलों, या सीरियलाइज़्ड ऑब्जेक्ट्स के लिए,
बड़ा टेक्स्ट (CLOB) पूर्ण आकार के दस्तावेजों के लिए,
JSON (MySQL और PostgreSQL में) स्कीमा-रहित या नेस्टेड डेटा के लिए
ARRAY (केवल PostgreSQL में) सूचियों के लिए
UUID ऐसे अद्वितीय आइडेंटिफायर्स के लिए जो संख्यात्मक क्रम पर निर्भर नहीं करते, जैसे सेशन टोकन या वैश्विक ट्रैकिंग कोड।
विशेष प्रकार तब आपको अधिक समृद्ध या अधिक लचीला डेटा स्टोर करने देते हैं जब पारंपरिक टेबल्स अकेले संरचना नहीं पकड़ पातीं।
श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
विशेष / बूलियन / अन्य
BOOLEAN, BOOL, BIT
True या False मान
TRUE, FALSE
विशेष / बूलियन / अन्य
BLOB
बाइनरी बड़े ऑब्जेक्ट्स (छवियाँ, फ़ाइलें)
[binary image data]
विशेष / बूलियन / अन्य
CLOB
बड़े टेक्स्ट दस्तावेज़
'Full contract text...'
विशेष / बूलियन / अन्य
JSON
संरचित या नेस्टेड डेटा
'{"name": "Alice"}'
विशेष / बूलियन / अन्य
ARRAY
मानों की सूचियाँ (केवल PostgreSQL)
[1,2,3]
विशेष / बूलियन / अन्य
UUID
वैश्विक रूप से अद्वितीय आइडेंटिफायर्स
'550e8400-e29b-41d4-a716-446655440000'
विभिन्न सिस्टम्स में SQL डेटा टाइप्स
डेटाबेस मैनेजमेंट सिस्टम्स इन डेटा टाइप्स का उपयोग कैसे करते हैं, इसकी बारीकियों में भिन्न होते हैं। जबकि व्यापक श्रेणियाँ समान रहती हैं, सटीक नाम और व्यवहार सिस्टम्स के बीच बदलते हैं।
अलग-अलग सिस्टम्स अपने डेटा टाइप्स को अपनी प्राथमिकताओं के साथ डिज़ाइन करते हैं, इसलिए उनके व्यवहार अलग होते हैं। कुछ अंतर छोटे होते हैं, जैसे सटीक कीवर्ड। अन्य व्यवहार में अंतर लाते हैं—जैसे टेक्स्ट लंबाई की सीमाएँ, बूलियन कैसे स्टोर होते हैं, या सिस्टम विशेष फ़ॉर्मेट्स का समर्थन करता है या नहीं।
MySQL गति और सरलता पर ज़ोर देता है, इसलिए यह बूलियन मानों के लिए व्यावहारिक, हल्के विकल्पों का उपयोग करता है, जैसे TINYINT (जो तकनीकी रूप से संख्याओं के रूप में स्टोर होता है)। यह कड़े टाइप सेमांटिक्स की तुलना में प्रदर्शन और व्यापक अनुकूलता को प्राथमिकता देता है।
PostgreSQL मानकों का पालन और विस्तारशीलता का लक्ष्य रखता है। यह इस तथ्य में झलकता है कि यह वास्तविक BOOLEAN टाइप का उपयोग करता है और ARRAY तथा JSONB जैसे अधिक समृद्ध डेटा टाइप विकल्प देता है, ताकि संरचित या नेस्टेड डेटा सीधे किसी कॉलम में स्टोर किया जा सके।
SQL Server एंटरप्राइज परिवेशों में पूर्वानुमेय प्रदर्शन और Microsoft इकोसिस्टम के साथ गहरी इंटीग्रेशन के लिए बनाया गया है। यही कारण है कि यह बूलियन के लिए BIT और बड़े टेक्स्ट के लिए VARCHAR(MAX) जैसे कड़ाई से परिभाषित टाइप्स देता है।
नीचे दी गई तालिका तीन प्रमुख SQL सिस्टम्स में सामान्य संकल्पनाओं के कार्यान्वयन का साथ-साथ नज़रिया देती है।
संकल्पना
MySQL
PostgreSQL
SQL Server
संख्यात्मक (पूर्णांक)
सामान्य प्रयोजन के पूर्णांकों के लिए INT का उपयोग करता है
पूर्णांकों के लिए INTEGER का उपयोग करता है
पूर्णांकों के लिए INT का उपयोग करता है
दशमलव / फिक्स्ड-प्रिसिशन संख्याएँ
सटीक संख्यात्मक मानों के लिए DECIMAL(p, s) का उपयोग करता है
सटीक प्रिसिशन स्टोरेज के लिए NUMERIC(p, s) का उपयोग करता है
सटीक संख्यात्मक मानों के लिए DECIMAL(p, s) का उपयोग करता है
मानक-लंबाई की टेक्स्ट स्ट्रिंग्स
परिवर्तनशील-लंबाई टेक्स्ट के लिए VARCHAR(n) का उपयोग करता है
परिवर्तनशील-लंबाई टेक्स्ट के लिए VARCHAR(n) का उपयोग करता है
परिवर्तनशील-लंबाई टेक्स्ट के लिए VARCHAR(n) का उपयोग करता है
बड़े टेक्स्ट का स्टोरेज
लंबे टेक्स्ट फ़ील्ड्स के लिए TEXT का उपयोग करता है
लंबे टेक्स्ट फ़ील्ड्स के लिए TEXT का उपयोग करता है
लंबे टेक्स्ट फ़ील्ड्स के लिए VARCHAR(MAX) का उपयोग करता है
बूलियन मान
बूलियन को TINYINT(1) (0 या 1) के रूप में स्टोर करता है
मूल BOOLEAN मानों (true/false) का उपयोग करता है
बूलियन-जैसे डेटा के लिए BIT (0 या 1) का उपयोग करता है
ऑटो-इन्क्रीमेंटिंग प्राइमरी कीज़
AUTO_INCREMENT कीवर्ड का उपयोग करता है
ऑटो-जनरेटेड इंटीजर के लिए SERIAL या IDENTITY का उपयोग करता है
ऑटो-जनरेटेड इंटीजर के लिए IDENTITY का उपयोग करता है
बहुत बड़े कैरेक्टर स्ट्रिंग्स
बेहद बड़े टेक्स्ट के लिए LONGTEXT का उपयोग करता है
व्यावहारिक ऊपरी सीमा के बिना बहुत बड़े VARCHAR की अनुमति देता है
बड़े या अबाउंडेड टेक्स्ट के लिए VARCHAR(MAX) का उपयोग करता है
JSON स्टोरेज
संरचित JSON डेटा के लिए JSON का समर्थन करता है
JSON (टेक्स्ट) और JSONB (बाइनरी-ऑप्टिमाइज़्ड) दोनों का समर्थन करता है
JSON का समर्थन करता है (टेक्स्ट के रूप में स्टोर)
एरे स्टोरेज
एरे टाइप्स का समर्थन नहीं करता
एक कॉलम में सूचियाँ स्टोर करने के लिए ARRAY का समर्थन करता है
एरे टाइप्स का समर्थन नहीं करता
व्यवहार में इसका क्या मतलब है
प्रत्येक सिस्टम के बुनियादी डिज़ाइन लक्ष्य और जिन वर्कलोड्स के लिए उन्हें ऑप्टिमाइज़ किया गया है, वे सीधे इस बात को प्रभावित करते हैं कि वे कैसे काम करने के लिए बनाए गए हैं।
इन अंतरों का मतलब है कि जबकि कई सामान्य SQL कौशल सिस्टम्स के बीच आसानी से स्थानांतरित हो जाते हैं, अधिकतम टेक्स्ट आकार, ऑटो-इन्क्रीमेंट कीवर्ड्स, या जटिल संरचनाओं के समर्थन जैसी बारीकियाँ भिन्न हो सकती हैं।
यदि आप केवल एक सिस्टम का उपयोग कर रहे हैं, तो अपने डेटाबेस मैनेजमेंट सिस्टम की विशेषताओं में विशेषज्ञ बनना आसान है। हालाँकि, नौकरी या विभाग बदलने पर आपको अलग नियमों वाले किसी अन्य डेटाबेस मैनेजमेंट सिस्टम में कूदना पड़ सकता है।
इसी कारण, SQL सीखते समय, किसी एक सिस्टम की विशेषताओं पर निर्भर रहने के बजाय डेटा टाइप्स के पीछे की साझा संकल्पनाओं को पहचानना सहायक होता है।
सही डेटा टाइप चुनना
डेटा टाइप चुनना कभी-कभी बहुत सरल होता है, लेकिन कभी-कभी थोड़ा सोच-विचार करना पड़ता है। एक अच्छा चुनाव आपके डेटा को क्वेरी करना आसान बनाता है, स्टोरेज को हल्का रखता है, और आगे के बग्स से बचाता है। व्यापक श्रेणी आमतौर पर आपके डेटा के प्रकार से निर्धारित होगी।
संख्यात्मक डेटा
उदाहरण के लिए, मान लीजिए आप मापन डेटा स्टोर कर रहे हैं। स्पष्ट है, आपको किसी संख्यात्मक प्रकार की आवश्यकता होगी, न कि कैलेंडर या स्ट्रिंग की। लेकिन आप जो मापन स्टोर करना चाहते हैं, वे कितने सटीक हैं? क्या इंटीजर ठीक हैं, या आपको दशमलव चाहिए? क्या आप निश्चित संख्या के महत्वपूर्ण अंकों की चाह रखते हैं?
फिर आपको स्टोरेज और दक्षता पर विचार करना चाहिए। ऐसा सबसे छोटा इंटीजर प्रकार चुनना जो आपके डेटा को सुरक्षित रूप से रख सके, आपकी टेबल्स को कुशल रखने में मदद करेगा। छोटे प्रकार कम स्टोरेज लेते हैं और विशेषकर बड़ी टेबल्स में प्रदर्शन सुधार सकते हैं। आमतौर पर आप अपनी अपेक्षित रेंज के लिए पर्याप्त बड़ा प्रकार चुनना चाहेंगे, बिना वास्तविक आवश्यकता से बहुत आगे गए।
जब इंटीजर काम नहीं करेगा, तो आपके पास DECIMAL या FLOAT का विकल्प होता है। फ्लोटिंग-पॉइंट प्रकार मानों का अनुमान लगाते हैं बजाय उन्हें ठीक-ठीक स्टोर करने के, जो वित्तीय, वैज्ञानिक, या अन्य सटीकता-संवेदनशील कार्यों में राउंडिंग त्रुटियाँ पैदा कर सकता है।
DECIMAL और NUMERIC सटीक मान स्टोर करते हैं, जिससे वे कीमतों या अनुपातों से जुड़ी किसी भी चीज़ के लिए बेहतर बनते हैं। हालाँकि, DECIMAL का स्टोरेज आकार आमतौर पर FLOAT से बड़ा होता है, यह इस पर निर्भर करता है कि आप कितने दशमलव स्थान सहेजते हैं।
अक्षरीय और स्ट्रिंग डेटा
स्ट्रिंग डेटा के लिए, आपको सोचना होगा कि आप प्रत्येक इनपुट को कितना बड़ा होने देना चाहते हैं।
आमतौर पर, आपको VARCHAR फ़ील्ड्स को अधिकतम लंबाई पर डिफॉल्ट करने के बजाय यथार्थवादी रूप से साइज करना चाहिए। अत्यधिक बड़े लिमिट्स आमतौर पर लचीलापन नहीं बढ़ाते, बल्कि भविष्य के डेवलपर्स को डेटा की अपेक्षित साइज के बारे में भ्रमित कर सकते हैं।
अपने अपेक्षित इनपुट—चाहे वह नाम हों, ईमेल हों या उत्पाद शीर्षक—के बारे में सोचें और उसके अनुसार कॉलम का आकार निर्धारित करें।
दिनांक और समय डेटा
कैलेंडर डेटा के लिए, आप जो स्टोर कर रहे हैं, उसके बारे में सटीक होना मददगार होता है।
यदि आपको केवल तारीख चाहिए या केवल समय, तो DATETIME के बजाय DATE या TIME का उपयोग करना बेहतर होता है। ये विकल्प आपके इरादों को स्पष्ट करते हैं और आगे की गड़बड़ियों की संभावना घटाते हैं। वे डेटाबेस को केवल-तिथि या केवल-समय क्वेरीज़ को बेहतर ढंग से ऑप्टिमाइज़ करने की गुंजाइश भी देते हैं।
बूलियन डेटा
जहाँ संभव हो, इंटीजर या स्ट्रिंग जैसे वर्कअराउंड के बजाय BOOLEAN जैसे डोमेन-उपयुक्त टाइप्स का उपयोग करें। नेटिव टाइप्स में बिल्ट-इन वैलिडेशन, स्पष्ट सेमांटिक्स, और उन डेटाबेस फ़ंक्शंस का समर्थन शामिल होता है जो विशिष्ट प्रकार के डेटा की अपेक्षा करते हैं।
नीचे सामान्य डेटा स्टोरेज लक्ष्यों और उन्हें पूरा करने के लिए अनुशंसित SQL डेटा टाइप्स का सारांश दिया गया है।
लक्ष्य
अनुशंसित डेटा टाइप
क्यों
सटीक संख्यात्मक मान स्टोर करना (पैसा, मापन)
DECIMAL या NUMERIC
फ़्लोटिंग-पॉइंट राउंडिंग समस्याओं के बिना सटीक मान स्टोर करता है
छोटा या मध्यम-लंबाई टेक्स्ट स्टोर करना
VARCHAR(n)
अनुमानित आकार के साथ कुशल स्टोरेज और लचीली लंबाई
लंबा, असंरचित टेक्स्ट स्टोर करना
TEXT या CLOB
विवरणों या दस्तावेज़ों जैसे टेक्स्ट ब्लॉक्स के लिए डिज़ाइन किया गया
केवल-तारीख या केवल-समय जानकारी स्टोर करना
DATE या TIME
अनावश्यक जटिलता से बचाता है और डेटा के वास्तविक अर्थ को दर्शाता है
लचीले, दस्तावेज़-जैसे मान स्टोर करना
JSON या JSONB
ऐसी नेस्टेड या विकसित होती संरचनाओं के लिए उपयोगी जो फिक्स्ड कॉलम्स में फिट नहीं बैठतीं
जो पाऩे वालों को समूहबद्ध करने और फ़िल्टरिंग पर पुनरावलोकन चाहिए, उनके लिएIntermediate SQL पाठ्यक्रम उन मूलभूत कौशलों पर चलता है।
सामान्य गलतियाँ और सर्वोत्तम अभ्यास
यदि डेटा टाइप्स सावधानी से नहीं चुने गए हों, तो एक साधारण डेटाबेस स्कीमा भी समस्याओं में पड़ सकता है।
ट्रंकेशन
उदाहरण के लिए, यदि आपके पास नामों के लिए एक कॉलम है जो केवल 5 अक्षरों की अनुमति देता है, तो आपको “Micha” के बजाय “Michael” मिल सकता है। इसे ट्रंकेशन नामक सामान्य समस्या कहा जाता है।
यह आमतौर पर नाम, पते या टिप्पणियों जैसे फ़ील्ड्स में दिखता है, जहाँ वास्तविक दुनिया का विविधता स्तर एक आशावादी सीमा से ऊपर जा सकता है। इससे बचने का एक तरीका है वास्तविक उदाहरणों के आधार पर टेक्स्ट फ़ील्ड्स का आकार तय करना या थोड़े बड़े आकार की ओर झुकना।
राउंडिंग त्रुटियाँ
एक और सामान्य समस्या है तब होने वाली अप्रत्याशित राउंडिंग, जब फ्लोटिंग-पॉइंट मानों का उपयोग पैसे या अन्य प्रिसिशन-संवेदनशील डेटा के लिए किया जाता है। क्योंकि FLOAT अनुमानित मान स्टोर करता है, छोटे-छोटे अंतर इकट्ठा होकर रिपोर्ट्स, सारांशों या कैलकुलेशंस को प्रभावित कर सकते हैं।
आप इसे DECIMAL चुनकर रोक सकते हैं—मुद्रा या सटीक दशमलव मानों से संबंधित किसी भी चीज़ के लिए। इससे डेटाबेस मानों को स्थिर रखेगा।
टाइप मिसमैच
टाइप मिसमैच भी धीमी क्वेरीज़ का कारण बन सकते हैं, खासकर जॉइन्स या तुलना में।
जब एक कॉलम स्ट्रिंग के रूप में स्टोर हो और दूसरा इंटीजर के रूप में (या जब प्रत्येक टेबल थोड़ा अलग प्रकार का उपयोग करती हो), और आप उन्हें जोड़ने की कोशिश करें, तो डेटाबेस को ऑन-द-फ्लाइ कन्वर्ज़न करना पड़ सकता है। यह त्रुटियों का कारण बन सकता है और अनावश्यक ओवरहेड जोड़ सकता है।
संबंधित कॉलम्स को प्रकार में संरेखित रखना इन छिपी कन्वर्ज़न्स से बचाता है और क्वेरीज़ को अधिक सुचारू रूप से चलने में मदद करता है।
दिनांक फ़ॉर्मेटिंग
कैलेंडर तिथियों की अपनी कई समस्याएँ होती हैं।
जब सिस्टम स्थानीय परंपराओं को मिलाते हैं या डेवलपर्स तिथियों को सही दिनांक प्रकारों के बजाय स्ट्रिंग्स के रूप में स्टोर करते हैं, तो दिनांक फ़ॉर्मेटिंग में असंगतताएँ भ्रम का एक प्रमुख स्रोत होती हैं। ये असंगतताएँ क्वेरीज़ को गलत व्यवहार करने या चुपचाप गलत परिणाम लौटाने का कारण बन सकती हैं।
सरल समाधान है वास्तविक दिनांक प्रकारों का उपयोग करना और टेक्स्ट रूप में तिथियों के साथ काम करते समय एक सुसंगत, अस्पष्टता-रहित फ़ॉर्मेट अपनाना। मैं हमारे Time Series Analysis in SQL Server पाठ्यक्रम की अत्यधिक अनुशंसा करता/करती हूँ, जो आपके डेटाबेस में सबसे सामान्य कैलेंडर समस्याओं से बचने में मदद करता है।
सर्वोत्तम अभ्यास
यहाँ कुछ सर्वोत्तम अभ्यास दिए गए हैं ताकि आपके डेटाबेस सुचारू रूप से चलें:
डिज़ाइन प्रक्रिया के शुरुआती चरण में टेबल्स को नमूना डेटा से भरें ताकि साइजिंग या टाइपिंग विकल्पों की किसी भी कमी का पता लग सके।
अपने प्रत्येक कॉलम के उद्देश्य और अपेक्षित रेंज का दस्तावेज़ीकरण करें ताकि भविष्य के परिवर्तन मिसमैच न लाएँ।
जब अधिक विशिष्ट प्रकार स्पष्टता में सुधार कर सकते हों, तो सामान्य प्रकारों का उपयोग करने से बचें।
निष्कर्ष
डेटा टाइप्स परिभाषित करते हैं कि आपका डेटाबेस आपके द्वारा स्टोर किए गए मानों को कैसे “समझता” है। ये स्टोरेज से लेकर प्रदर्शन और स्पष्टता तक हर चीज़ को प्रभावित करते हैं। इनके काम करने के तरीके को सीखना आपके डेटाबेस को अधिक विश्वसनीय और पूर्वानुमेय बनाता है।
SQL में डेटा टाइप परिभाषित करता है कि कोई कॉलम किस प्रकार का डेटा स्टोर कर सकता है और वह डेटा क्वेरी या प्रोसेस होने पर कैसे व्यवहार करता है। यह स्टोरेज, वैलिडेशन, सॉर्टिंग, तुलना, और गणितीय ऑपरेशंस को प्रभावित करता है।
SQL Data Types FAQa
SQL में डेटा टाइप क्या है?⌄
SQL में डेटा टाइप नियमों का एक समूह है जो SQL को बताता है कि आपके डेटाबेस कॉलम में किस तरह की जानकारी अपेक्षित है। मूल रूप से, यही तरीका है जिससे आपका सिस्टम आपके डेटा को “समझता” है।
मैं SQL में किसी कॉलम को किसी विशिष्ट डेटा टाइप का कैसे सेट करूँ?⌄
जब आप SQL में कोई कॉलम परिभाषित करते हैं, तो आप कॉलम को नाम देने के तुरंत बाद डेटा टाइप परिभाषित करेंगे। यह कुछ ऐसा दिखेगा: name DATATYPE। आप पहले से परिभाषित कॉलम में डेटा टाइप अपडेट करने के लिए ALTER COLUMN कमांड का भी उपयोग कर सकते हैं।
मुझे सही डेटा टाइप क्यों चुनना चाहिए?⌄
अपने डेटा के लिए सबसे उपयुक्त डेटा टाइप चुनने से यह स्पष्ट होता है कि आपके पास किस प्रकार का डेटा है, उचित स्टोरेज और उपयोग सुनिश्चित होता है, और आपके कोड में आगे चलकर बग्स से बचाव होता है।
DECIMAL और FLOAT में क्या अंतर है?⌄
DECIMAL एक सटीक, संख्यात्मक डेटा टाइप है जो निश्चित संख्या के दशमलव स्थानों के साथ संख्या स्टोर करता है। दूसरी ओर, FLOAT वह डेटा टाइप है जो संख्या का अनुमानित मान स्टोर करता है।
क्या सभी डेटाबेस मैनेजमेंट सिस्टम एक जैसे डेटा टाइप्स का उपयोग करते हैं?⌄
हाँ और नहीं। प्रत्येक डेटाबेस मैनेजमेंट सिस्टम में संख्यात्मक, अक्षरीय और कैलेंडर डेटा टाइप्स के लिए समान प्रकार होते हैं। लेकिन वे अपने विशिष्ट नामों, पर्दे के पीछे के उपयोग, और समर्थित विशेष डेटा टाइप्स में भिन्न होते हैं।
मैं एक पीएचडी हूँ, जिसके पास जैविक अनुसंधान परिवेश में डेटा के साथ काम करने का 13 वर्षों का अनुभव है। मैं Python, MATLAB और R सहित कई प्रोग्रामिंग भाषाओं में सॉफ्टवेयर बनाती/बनाता हूँ। मुझे सीखने के प्रति अपने प्रेम को दुनिया के साथ साझा करने का जुनून है।
जब आप पहली बार SQL के साथ काम करना शुरू करते हैं, तो डेटा टाइप्स को साधारण लेबल समझना आसान होता है। कोई भी कॉलम या तो संख्या, टेक्स्ट, तारीखें या विशेष डेटा टाइप्स रखता है। लेकिन डेटा टाइप केवल लेबल नहीं है—यह नियमों का एक समूह है जो परिभाषित करता है कि डेटाबेस की दृष्टि में कोई वैल्यू क्या है।
व्यवहार में, डेटा टाइप्स यह आकार देते हैं कि SQL आपके डेटाबेस की जानकारी को कैसे “समझता” है। ये निर्देशों का एक सेट है जो SQL को आपका डेटा सही तरह से पढ़ने, तुलना करने और प्रोसेस करने के लिए आवश्यक संदर्भ देता है।
इस ट्यूटोरियल में, हम प्रमुख SQL डेटा टाइप श्रेणियों को देखेंगे और जानेंगे कि वे अलग-अलग डेटाबेस मैनेजमेंट सिस्टम में कैसे बर्ताव करती हैं। मैं आपको उदाहरणों के साथ-साथ चलते रहने के लिए प्रोत्साहित करता/करती हूँ।
यदि आपने पहले डेटाबेस टेबल्स के साथ बहुत काम नहीं किया है, तो हमारा SQL Fundamentals पाठ्यक्रम ऐसे डाटासेट्स की संरचना समझने के लिए स्पष्ट, शुरुआती-अनुकूल नींव देता है।
SQL डेटा टाइप्स क्या होते हैं?
डेटा टाइप आपके डेटा के फ़ॉर्मेट का वर्णन करता है: कोई कॉलम किन प्रकार के मान रख सकता है, वे मान अंदरूनी तौर पर कैसे संग्रहीत होते हैं, और उन पर कौन-से ऑपरेशंस चलाना सार्थक है।
इसका मतलब है कि डेटा टाइप का चुनाव केवल टेबल डिज़ाइन से अधिक को प्रभावित करता है। यह स्टोरेज की ज़रूरतों, क्वेरी परफॉर्मेंस, सॉर्टिंग व्यवहार, गणितीय ऑपरेशंस, और यहाँ तक कि अलग-अलग सिस्टम एक ही वैल्यू की व्याख्या कैसे करते हैं—इन सब पर असर डाल सकता है।
यहाँ एक साधारण टेबल है जो एक साथ कई प्रकारों का उपयोग करती है:
इस टेबल में प्रत्येक कॉलम यह परिभाषित करता है कि वह किस प्रकार का डेटा रख सकता है।
idकॉलम पूर्णांक (whole numbers) स्टोर करेगा, जिससे प्रत्येक कर्मचारी को एक अद्वितीय आईडी मिलेगी।nameकॉलम अधिकतम 50 अक्षरों का टेक्स्ट रख सकता है, ताकि आप छोटे नाम संग्रहीत कर सकें।start_dateकॉलम कैलेंडर तिथियों के लिए है।activeकॉलम true या false मान रखेगा, जिससे यह ट्रैक करना आसान हो जाता है कि कौन-से कर्मचारी वर्तमान में सक्रिय हैं।अंत में,
salaryकॉलम 10-अंकों की प्रिसिशन के साथ मौद्रिक राशियाँ स्टोर करेगा, जिसमें दशमलव के बाद सेंट्स के लिए दो अंक रखे जाएँगे।मिलकर, ये कॉलम एक संरचित टेबल बनाते हैं जो प्रत्येक फ़ील्ड में अनुमत मानों के प्रकारों के बारे में नियम लागू करती है। इससे डेटा अधिक पूर्वानुमेय और काम करने में आसान बनता है।
आइए इसमें कुछ उदाहरण डेटा जोड़ते हैं और देखते हैं कि PostgreSQL का उपयोग करते हुए परिणामी टेबल कैसी दिख सकती है।
id
name
start_date
active
salary
1
Alice Johnson
2025-01-15
TRUE
55000.00
2
Bob Smith
2024-06-01
FALSE
62000.50
अलग-अलग डेटाबेस सिस्टम समान सिद्धांतों का पालन करते हैं, पर नामकरण और विशेषताओं में भिन्न होते हैं। उदाहरण के लिए, SQL Server
BOOLEANके बजायBITका उपयोग करता है, और MySQLBOOLEANको एक छोटे पूर्णांक के रूप में मानता है।SQL डेटा टाइप्स की श्रेणियाँ
डेटा टाइप्स की चार मुख्य श्रेणियाँ हैं: संख्यात्मक, अक्षरीय, दिनांक, और विशेष। आइए प्रत्येक को विस्तार से देखें।
संख्यात्मक डेटा टाइप्स
संख्यात्मक प्रकार पूर्णांक या दशमलव संख्याएँ स्टोर करते हैं। विशिष्ट संख्यात्मक प्रकार यह निर्धारित करेगा कि संग्रहीत संख्याओं की सीमा, प्रिसिशन और स्टोरेज आकार क्या होगा। इस श्रेणी में सबसे सामान्य डेटा टाइप्स हैं:
इंटीजर, जैसे
INT,SMALLINT, औरBIGINT, पूर्णांकों के लिए,दशमलव, जैसे
DECIMAL(p, s)औरNUMERIC(p, s), सटीक दशमलव मानों के लिए,और फ्लोट्स, जैसे
FLOATऔरDOUBLE, अनुमानित मानों के लिए जो छोटे राउंडिंग अंतर ला सकते हैंविभिन्न संख्यात्मक डेटा टाइप्स दिखाने के लिए एक उदाहरण टेबल बनाते हैं:
यहाँ आउटपुट टेबल कुछ ऐसी दिखेगी:
product_id
price
measurement
1
19.99
3.1415
2
250.56
2.71828
जैसा कि आप देख सकते हैं, पहला कॉलम केवल पूर्णांक तक सीमित है, दूसरा कॉलम दशमलव बिंदु के बाद दो अंकों तक के दशमलव तक सीमित है, और तीसरा कॉलम अनिश्चित संख्या के अंकों वाले दशमलव रख सकता है।
पहली नज़र में,
DECIMALऔरFLOATएक जैसे लग सकते हैं। लेकिन एक महत्वपूर्ण अंतर है:DECIMALनिर्दिष्ट दशमलव स्थानों के साथ सटीक संख्या संग्रहीत करता है, जबकिFLOATएक अनुमानित मान रखता है जो सिस्टम के अनुसार थोड़ा भिन्न हो सकता है।जब प्रिसिशन आवश्यक हो तो दशमलव का उपयोग करना महत्वपूर्ण है, और केवल तभी फ्लोट्स पर भरोसा करें जब छोटे राउंडिंग त्रुटियाँ स्वीकार्य हों।
श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
संख्यात्मक
INT,SMALLINT,BIGINTविभिन्न आकार के पूर्णांक
1, 42, 1000
संख्यात्मक
DECIMAL(p,s),NUMERIC(p,s)निश्चित प्रिसिशन वाले सटीक दशमलव मान
19.99, 250.56
संख्यात्मक
FLOAT,DOUBLEअनुमानित दशमलव मान। छोटे राउंडिंग अंतर ला सकते हैं
3.1415, 2.71828
अक्षरीय और स्ट्रिंग डेटा टाइप्स
अक्षरीय प्रकार टेक्स्ट स्टोर करते हैं। प्रदर्शन और स्टोरेज दक्षता में भिन्नताओं के कारण इनके कुछ अलग प्रकार होते हैं।
CHAR(n)निश्चित-लंबाई वाले कैरेक्टर सेट्स के लिए है। यह ऐसे डेटा के लिए उपयोगी है जिसका आकार हमेशा समान होता है, जैसे राज्य कोड या हवाई अड्डे के संक्षिप्त रूप।VARCHAR(n)परिवर्तनशील-लंबाई वाले कैरेक्टर सेट्स के लिए है। यह नाम, ईमेल पते और अन्य उपयोगकर्ता-प्रविष्ट टेक्स्ट के लिए उपयोगी है।TEXTऔर समान प्रकार असंरचित टेक्स्ट के बड़े ब्लॉक्स के लिए उपयोग किए जाते हैं, जैसे ब्लॉग पोस्ट या उत्पाद विवरण।कुछ सिस्टम, जैसे SQL Server, यूनिकोड स्ट्रिंग टाइप्स का भी समर्थन करते हैं, जैसे
NCHARऔरNVARCHAR, जो तब उपयोगी होते हैं जब आपके डेटा में विभिन्न लिपियों—जैसे लैटिन, चीनी या सिरिलिक—में टेक्स्ट शामिल हो।श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
अक्षरीय / स्ट्रिंग
CHAR(n)निश्चित-लंबाई का टेक्स्ट
'US', 'CA'
अक्षरीय / स्ट्रिंग
VARCHAR(n)परिवर्तनशील-लंबाई का टेक्स्ट
'Alice Johnson', 'Bob Smith'
अक्षरीय / स्ट्रिंग
TEXTअसंरचित टेक्स्ट के बड़े ब्लॉक्स
'Preferred contact by email.', 'Requires invoice copy for each order.'
अक्षरीय / स्ट्रिंग
NCHAR(n),NVARCHAR(n)निश्चित या परिवर्तनशील-लंबाई का यूनिकोड टेक्स्ट
'Å', 'É', 'München', 'São Paulo'
आइए एक उदाहरण टेबल के साथ देखें कि अलग-अलग स्ट्रिंग डेटा टाइप्स कैसे काम करते हैं:
यहाँ देखें कि यह टेबल अंत में कैसी दिखेगी। आप प्रत्येक स्ट्रिंग डेटा टाइप में एन्कोड की गई लंबाई के अंतर देख सकते हैं।
id
country_code
name
notes
1
US
Alice Johnson
Preferred contact by email.
2
CA
Bob Smith
Requires invoice copy for each order.
यहाँ,
CHAR(2)सुसंगत लंबाई लागू करता है, जबकिVARCHARऔरTEXTअधिक लचीलापन देते हैं।दिनांक और समय डेटा टाइप्स
दिनांक और समय डेटा टाइप्स समय-संबंधी जानकारी को सटीक रूप से स्टोर और क्वेरी करना संभव बनाते हैं। शुरुआती लोग सोच सकते हैं कि वे इस तरह की जानकारी को एन्कोड करने के लिए संख्यात्मक या स्ट्रिंग डेटा टाइप्स का उपयोग कर सकते हैं। हालाँकि, ऐसा करने से आगे चलकर डेटा विश्लेषण में समस्याएँ आ सकती हैं। किसी विशिष्ट कैलेंडर डेटा टाइप का उपयोग सब कुछ सुचारू बना सकता है।
सबसे सामान्य रूप से उपयोग किए जाने वाले तीन प्रकार हैं:
DATE, जो वर्ष, माह और दिन एन्कोड करता है,TIME, जो घंटा, मिनट और सेकंड स्टोर करता है,और
DATETIMEयाTIMESTAMP, जो संयुक्त दिनांक और समय स्टोर करते हैं।आधुनिक डेटाबेस आंशिक सेकंड या समय क्षेत्र–सचेत डेटा टाइप्स का भी समर्थन कर सकते हैं, जैसे PostgreSQL में
TIMESTAMPTZ, जो टाइमस्टैम्प्स को UTC में स्टोर करता है और पुनर्प्राप्ति पर उन्हें स्वतः आपकी सत्र की समय क्षेत्र में कन्वर्ट करता है।श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
दिनांक / समय
DATEकैलेंडर तिथियाँ (वर्ष, माह, दिन)
'2025-11-26'
दिनांक / समय
TIMEदिन का समय (घंटा, मिनट, सेकंड)
'09:30:00', '18:45:30'
दिनांक / समय
DATETIME,TIMESTAMPसंयुक्त दिनांक और समय
'2025-11-20 14:15:00', '2025-11-21 09:00:00'
दिनांक / समय
TIMESTAMPTZसमय क्षेत्र सहित संयुक्त दिनांक और समय (PostgreSQL)
'2025-11-21 09:00:00+00'
आइए एक साधारण टेबल बनाएँ ताकि इन समय-सम्बंधी डेटा टाइप्स को प्रदर्शित किया जा सके:
यहाँ देखें कि टेबल कैसी दिखेगी:
event_id
event_date
start_time
created_at
1
2025-11-26
09:30:00
2025-11-20 14:15:00
2
2025-12-01
18:45:30
2025-11-21 09:00:00
आप देख सकते हैं कि सही दिनांक या टाइमस्टैम्प प्रकार चुनने से आप किस प्रकार का डेटा स्टोर कर सकते हैं, यह प्रभावित होता है।
बूलियन और अन्य विशेष डेटा टाइप्स
सभी प्रकार का डेटा पिछली श्रेणियों में ठीक-ठीक फिट नहीं होता। इनके लिए, SQL विशेष उपयोग-केसों हेतु कुछ खास प्रकार शामिल करता है। जिनमें से कुछ सामान्य प्रकार जो आप देख सकते हैं, वे हैं:
बूलियन मान (
BOOLEAN,BOOL, याBIT, सिस्टम के अनुसार) true या false रिकॉर्ड करने के लिए,बाइनरी डेटा (
BLOB) छवियों, फ़ाइलों, या सीरियलाइज़्ड ऑब्जेक्ट्स के लिए,बड़ा टेक्स्ट (
CLOB) पूर्ण आकार के दस्तावेजों के लिए,JSON(MySQL और PostgreSQL में) स्कीमा-रहित या नेस्टेड डेटा के लिएARRAY(केवल PostgreSQL में) सूचियों के लिएUUIDऐसे अद्वितीय आइडेंटिफायर्स के लिए जो संख्यात्मक क्रम पर निर्भर नहीं करते, जैसे सेशन टोकन या वैश्विक ट्रैकिंग कोड।विशेष प्रकार तब आपको अधिक समृद्ध या अधिक लचीला डेटा स्टोर करने देते हैं जब पारंपरिक टेबल्स अकेले संरचना नहीं पकड़ पातीं।
श्रेणी
डेटा टाइप(स्)
उद्देश्य / क्या स्टोर करता है
उदाहरण मान
विशेष / बूलियन / अन्य
BOOLEAN,BOOL,BITTrue या False मान
TRUE, FALSE
विशेष / बूलियन / अन्य
BLOBबाइनरी बड़े ऑब्जेक्ट्स (छवियाँ, फ़ाइलें)
[binary image data]
विशेष / बूलियन / अन्य
CLOBबड़े टेक्स्ट दस्तावेज़
'Full contract text...'
विशेष / बूलियन / अन्य
JSONसंरचित या नेस्टेड डेटा
'{"name": "Alice"}'
विशेष / बूलियन / अन्य
ARRAYमानों की सूचियाँ (केवल PostgreSQL)
[1,2,3]
विशेष / बूलियन / अन्य
UUIDवैश्विक रूप से अद्वितीय आइडेंटिफायर्स
'550e8400-e29b-41d4-a716-446655440000'
विभिन्न सिस्टम्स में SQL डेटा टाइप्स
डेटाबेस मैनेजमेंट सिस्टम्स इन डेटा टाइप्स का उपयोग कैसे करते हैं, इसकी बारीकियों में भिन्न होते हैं। जबकि व्यापक श्रेणियाँ समान रहती हैं, सटीक नाम और व्यवहार सिस्टम्स के बीच बदलते हैं।
अलग-अलग सिस्टम्स अपने डेटा टाइप्स को अपनी प्राथमिकताओं के साथ डिज़ाइन करते हैं, इसलिए उनके व्यवहार अलग होते हैं। कुछ अंतर छोटे होते हैं, जैसे सटीक कीवर्ड। अन्य व्यवहार में अंतर लाते हैं—जैसे टेक्स्ट लंबाई की सीमाएँ, बूलियन कैसे स्टोर होते हैं, या सिस्टम विशेष फ़ॉर्मेट्स का समर्थन करता है या नहीं।
MySQL गति और सरलता पर ज़ोर देता है, इसलिए यह बूलियन मानों के लिए व्यावहारिक, हल्के विकल्पों का उपयोग करता है, जैसे
TINYINT(जो तकनीकी रूप से संख्याओं के रूप में स्टोर होता है)। यह कड़े टाइप सेमांटिक्स की तुलना में प्रदर्शन और व्यापक अनुकूलता को प्राथमिकता देता है।PostgreSQL मानकों का पालन और विस्तारशीलता का लक्ष्य रखता है। यह इस तथ्य में झलकता है कि यह वास्तविक
BOOLEANटाइप का उपयोग करता है औरARRAYतथाJSONBजैसे अधिक समृद्ध डेटा टाइप विकल्प देता है, ताकि संरचित या नेस्टेड डेटा सीधे किसी कॉलम में स्टोर किया जा सके।SQL Server एंटरप्राइज परिवेशों में पूर्वानुमेय प्रदर्शन और Microsoft इकोसिस्टम के साथ गहरी इंटीग्रेशन के लिए बनाया गया है। यही कारण है कि यह बूलियन के लिए
BITऔर बड़े टेक्स्ट के लिएVARCHAR(MAX)जैसे कड़ाई से परिभाषित टाइप्स देता है।नीचे दी गई तालिका तीन प्रमुख SQL सिस्टम्स में सामान्य संकल्पनाओं के कार्यान्वयन का साथ-साथ नज़रिया देती है।
संकल्पना
MySQL
PostgreSQL
SQL Server
संख्यात्मक (पूर्णांक)
सामान्य प्रयोजन के पूर्णांकों के लिए
INTका उपयोग करता हैपूर्णांकों के लिए
INTEGERका उपयोग करता हैपूर्णांकों के लिए
INTका उपयोग करता हैदशमलव / फिक्स्ड-प्रिसिशन संख्याएँ
सटीक संख्यात्मक मानों के लिए
DECIMAL(p, s)का उपयोग करता हैसटीक प्रिसिशन स्टोरेज के लिए
NUMERIC(p, s)का उपयोग करता हैसटीक संख्यात्मक मानों के लिए
DECIMAL(p, s)का उपयोग करता हैमानक-लंबाई की टेक्स्ट स्ट्रिंग्स
परिवर्तनशील-लंबाई टेक्स्ट के लिए
VARCHAR(n)का उपयोग करता हैपरिवर्तनशील-लंबाई टेक्स्ट के लिए
VARCHAR(n)का उपयोग करता हैपरिवर्तनशील-लंबाई टेक्स्ट के लिए
VARCHAR(n)का उपयोग करता हैबड़े टेक्स्ट का स्टोरेज
लंबे टेक्स्ट फ़ील्ड्स के लिए
TEXTका उपयोग करता हैलंबे टेक्स्ट फ़ील्ड्स के लिए
TEXTका उपयोग करता हैलंबे टेक्स्ट फ़ील्ड्स के लिए
VARCHAR(MAX)का उपयोग करता हैबूलियन मान
बूलियन को
TINYINT(1)(0 या 1) के रूप में स्टोर करता हैमूल
BOOLEANमानों (true/false) का उपयोग करता हैबूलियन-जैसे डेटा के लिए
BIT(0 या 1) का उपयोग करता हैऑटो-इन्क्रीमेंटिंग प्राइमरी कीज़
AUTO_INCREMENTकीवर्ड का उपयोग करता हैऑटो-जनरेटेड इंटीजर के लिए
SERIALयाIDENTITYका उपयोग करता हैऑटो-जनरेटेड इंटीजर के लिए
IDENTITYका उपयोग करता हैबहुत बड़े कैरेक्टर स्ट्रिंग्स
बेहद बड़े टेक्स्ट के लिए
LONGTEXTका उपयोग करता हैव्यावहारिक ऊपरी सीमा के बिना बहुत बड़े
VARCHARकी अनुमति देता हैबड़े या अबाउंडेड टेक्स्ट के लिए
VARCHAR(MAX)का उपयोग करता हैJSON स्टोरेज
संरचित JSON डेटा के लिए
JSONका समर्थन करता हैJSON(टेक्स्ट) औरJSONB(बाइनरी-ऑप्टिमाइज़्ड) दोनों का समर्थन करता हैJSONका समर्थन करता है (टेक्स्ट के रूप में स्टोर)एरे स्टोरेज
एरे टाइप्स का समर्थन नहीं करता
एक कॉलम में सूचियाँ स्टोर करने के लिए
ARRAYका समर्थन करता हैएरे टाइप्स का समर्थन नहीं करता
व्यवहार में इसका क्या मतलब है
प्रत्येक सिस्टम के बुनियादी डिज़ाइन लक्ष्य और जिन वर्कलोड्स के लिए उन्हें ऑप्टिमाइज़ किया गया है, वे सीधे इस बात को प्रभावित करते हैं कि वे कैसे काम करने के लिए बनाए गए हैं।
इन अंतरों का मतलब है कि जबकि कई सामान्य SQL कौशल सिस्टम्स के बीच आसानी से स्थानांतरित हो जाते हैं, अधिकतम टेक्स्ट आकार, ऑटो-इन्क्रीमेंट कीवर्ड्स, या जटिल संरचनाओं के समर्थन जैसी बारीकियाँ भिन्न हो सकती हैं।
यदि आप केवल एक सिस्टम का उपयोग कर रहे हैं, तो अपने डेटाबेस मैनेजमेंट सिस्टम की विशेषताओं में विशेषज्ञ बनना आसान है। हालाँकि, नौकरी या विभाग बदलने पर आपको अलग नियमों वाले किसी अन्य डेटाबेस मैनेजमेंट सिस्टम में कूदना पड़ सकता है।
इसी कारण, SQL सीखते समय, किसी एक सिस्टम की विशेषताओं पर निर्भर रहने के बजाय डेटा टाइप्स के पीछे की साझा संकल्पनाओं को पहचानना सहायक होता है।
सही डेटा टाइप चुनना
डेटा टाइप चुनना कभी-कभी बहुत सरल होता है, लेकिन कभी-कभी थोड़ा सोच-विचार करना पड़ता है। एक अच्छा चुनाव आपके डेटा को क्वेरी करना आसान बनाता है, स्टोरेज को हल्का रखता है, और आगे के बग्स से बचाता है। व्यापक श्रेणी आमतौर पर आपके डेटा के प्रकार से निर्धारित होगी।
संख्यात्मक डेटा
उदाहरण के लिए, मान लीजिए आप मापन डेटा स्टोर कर रहे हैं। स्पष्ट है, आपको किसी संख्यात्मक प्रकार की आवश्यकता होगी, न कि कैलेंडर या स्ट्रिंग की। लेकिन आप जो मापन स्टोर करना चाहते हैं, वे कितने सटीक हैं? क्या इंटीजर ठीक हैं, या आपको दशमलव चाहिए? क्या आप निश्चित संख्या के महत्वपूर्ण अंकों की चाह रखते हैं?
फिर आपको स्टोरेज और दक्षता पर विचार करना चाहिए। ऐसा सबसे छोटा इंटीजर प्रकार चुनना जो आपके डेटा को सुरक्षित रूप से रख सके, आपकी टेबल्स को कुशल रखने में मदद करेगा। छोटे प्रकार कम स्टोरेज लेते हैं और विशेषकर बड़ी टेबल्स में प्रदर्शन सुधार सकते हैं। आमतौर पर आप अपनी अपेक्षित रेंज के लिए पर्याप्त बड़ा प्रकार चुनना चाहेंगे, बिना वास्तविक आवश्यकता से बहुत आगे गए।
जब इंटीजर काम नहीं करेगा, तो आपके पास
DECIMALयाFLOATका विकल्प होता है। फ्लोटिंग-पॉइंट प्रकार मानों का अनुमान लगाते हैं बजाय उन्हें ठीक-ठीक स्टोर करने के, जो वित्तीय, वैज्ञानिक, या अन्य सटीकता-संवेदनशील कार्यों में राउंडिंग त्रुटियाँ पैदा कर सकता है।DECIMALऔरNUMERICसटीक मान स्टोर करते हैं, जिससे वे कीमतों या अनुपातों से जुड़ी किसी भी चीज़ के लिए बेहतर बनते हैं। हालाँकि,DECIMALका स्टोरेज आकार आमतौर परFLOATसे बड़ा होता है, यह इस पर निर्भर करता है कि आप कितने दशमलव स्थान सहेजते हैं।अक्षरीय और स्ट्रिंग डेटा
स्ट्रिंग डेटा के लिए, आपको सोचना होगा कि आप प्रत्येक इनपुट को कितना बड़ा होने देना चाहते हैं।
आमतौर पर, आपको
VARCHARफ़ील्ड्स को अधिकतम लंबाई पर डिफॉल्ट करने के बजाय यथार्थवादी रूप से साइज करना चाहिए। अत्यधिक बड़े लिमिट्स आमतौर पर लचीलापन नहीं बढ़ाते, बल्कि भविष्य के डेवलपर्स को डेटा की अपेक्षित साइज के बारे में भ्रमित कर सकते हैं।अपने अपेक्षित इनपुट—चाहे वह नाम हों, ईमेल हों या उत्पाद शीर्षक—के बारे में सोचें और उसके अनुसार कॉलम का आकार निर्धारित करें।
दिनांक और समय डेटा
कैलेंडर डेटा के लिए, आप जो स्टोर कर रहे हैं, उसके बारे में सटीक होना मददगार होता है।
यदि आपको केवल तारीख चाहिए या केवल समय, तो
DATETIMEके बजायDATEयाTIMEका उपयोग करना बेहतर होता है। ये विकल्प आपके इरादों को स्पष्ट करते हैं और आगे की गड़बड़ियों की संभावना घटाते हैं। वे डेटाबेस को केवल-तिथि या केवल-समय क्वेरीज़ को बेहतर ढंग से ऑप्टिमाइज़ करने की गुंजाइश भी देते हैं।बूलियन डेटा
जहाँ संभव हो, इंटीजर या स्ट्रिंग जैसे वर्कअराउंड के बजाय
BOOLEANजैसे डोमेन-उपयुक्त टाइप्स का उपयोग करें। नेटिव टाइप्स में बिल्ट-इन वैलिडेशन, स्पष्ट सेमांटिक्स, और उन डेटाबेस फ़ंक्शंस का समर्थन शामिल होता है जो विशिष्ट प्रकार के डेटा की अपेक्षा करते हैं।नीचे सामान्य डेटा स्टोरेज लक्ष्यों और उन्हें पूरा करने के लिए अनुशंसित SQL डेटा टाइप्स का सारांश दिया गया है।
लक्ष्य
अनुशंसित डेटा टाइप
क्यों
सटीक संख्यात्मक मान स्टोर करना (पैसा, मापन)
DECIMALयाNUMERICफ़्लोटिंग-पॉइंट राउंडिंग समस्याओं के बिना सटीक मान स्टोर करता है
छोटा या मध्यम-लंबाई टेक्स्ट स्टोर करना
VARCHAR(n)अनुमानित आकार के साथ कुशल स्टोरेज और लचीली लंबाई
लंबा, असंरचित टेक्स्ट स्टोर करना
TEXTयाCLOBविवरणों या दस्तावेज़ों जैसे टेक्स्ट ब्लॉक्स के लिए डिज़ाइन किया गया
केवल-तारीख या केवल-समय जानकारी स्टोर करना
DATEयाTIMEअनावश्यक जटिलता से बचाता है और डेटा के वास्तविक अर्थ को दर्शाता है
लचीले, दस्तावेज़-जैसे मान स्टोर करना
JSONयाJSONBऐसी नेस्टेड या विकसित होती संरचनाओं के लिए उपयोगी जो फिक्स्ड कॉलम्स में फिट नहीं बैठतीं
जो पाऩे वालों को समूहबद्ध करने और फ़िल्टरिंग पर पुनरावलोकन चाहिए, उनके लिए Intermediate SQL पाठ्यक्रम उन मूलभूत कौशलों पर चलता है।
सामान्य गलतियाँ और सर्वोत्तम अभ्यास
यदि डेटा टाइप्स सावधानी से नहीं चुने गए हों, तो एक साधारण डेटाबेस स्कीमा भी समस्याओं में पड़ सकता है।
ट्रंकेशन
उदाहरण के लिए, यदि आपके पास नामों के लिए एक कॉलम है जो केवल 5 अक्षरों की अनुमति देता है, तो आपको “Micha” के बजाय “Michael” मिल सकता है। इसे ट्रंकेशन नामक सामान्य समस्या कहा जाता है।
यह आमतौर पर नाम, पते या टिप्पणियों जैसे फ़ील्ड्स में दिखता है, जहाँ वास्तविक दुनिया का विविधता स्तर एक आशावादी सीमा से ऊपर जा सकता है। इससे बचने का एक तरीका है वास्तविक उदाहरणों के आधार पर टेक्स्ट फ़ील्ड्स का आकार तय करना या थोड़े बड़े आकार की ओर झुकना।
राउंडिंग त्रुटियाँ
एक और सामान्य समस्या है तब होने वाली अप्रत्याशित राउंडिंग, जब फ्लोटिंग-पॉइंट मानों का उपयोग पैसे या अन्य प्रिसिशन-संवेदनशील डेटा के लिए किया जाता है। क्योंकि
FLOATअनुमानित मान स्टोर करता है, छोटे-छोटे अंतर इकट्ठा होकर रिपोर्ट्स, सारांशों या कैलकुलेशंस को प्रभावित कर सकते हैं।आप इसे
DECIMALचुनकर रोक सकते हैं—मुद्रा या सटीक दशमलव मानों से संबंधित किसी भी चीज़ के लिए। इससे डेटाबेस मानों को स्थिर रखेगा।टाइप मिसमैच
टाइप मिसमैच भी धीमी क्वेरीज़ का कारण बन सकते हैं, खासकर जॉइन्स या तुलना में।
जब एक कॉलम स्ट्रिंग के रूप में स्टोर हो और दूसरा इंटीजर के रूप में (या जब प्रत्येक टेबल थोड़ा अलग प्रकार का उपयोग करती हो), और आप उन्हें जोड़ने की कोशिश करें, तो डेटाबेस को ऑन-द-फ्लाइ कन्वर्ज़न करना पड़ सकता है। यह त्रुटियों का कारण बन सकता है और अनावश्यक ओवरहेड जोड़ सकता है।
संबंधित कॉलम्स को प्रकार में संरेखित रखना इन छिपी कन्वर्ज़न्स से बचाता है और क्वेरीज़ को अधिक सुचारू रूप से चलने में मदद करता है।
दिनांक फ़ॉर्मेटिंग
कैलेंडर तिथियों की अपनी कई समस्याएँ होती हैं।
जब सिस्टम स्थानीय परंपराओं को मिलाते हैं या डेवलपर्स तिथियों को सही दिनांक प्रकारों के बजाय स्ट्रिंग्स के रूप में स्टोर करते हैं, तो दिनांक फ़ॉर्मेटिंग में असंगतताएँ भ्रम का एक प्रमुख स्रोत होती हैं। ये असंगतताएँ क्वेरीज़ को गलत व्यवहार करने या चुपचाप गलत परिणाम लौटाने का कारण बन सकती हैं।
सरल समाधान है वास्तविक दिनांक प्रकारों का उपयोग करना और टेक्स्ट रूप में तिथियों के साथ काम करते समय एक सुसंगत, अस्पष्टता-रहित फ़ॉर्मेट अपनाना। मैं हमारे Time Series Analysis in SQL Server पाठ्यक्रम की अत्यधिक अनुशंसा करता/करती हूँ, जो आपके डेटाबेस में सबसे सामान्य कैलेंडर समस्याओं से बचने में मदद करता है।
सर्वोत्तम अभ्यास
यहाँ कुछ सर्वोत्तम अभ्यास दिए गए हैं ताकि आपके डेटाबेस सुचारू रूप से चलें:
डिज़ाइन प्रक्रिया के शुरुआती चरण में टेबल्स को नमूना डेटा से भरें ताकि साइजिंग या टाइपिंग विकल्पों की किसी भी कमी का पता लग सके।
अपने प्रत्येक कॉलम के उद्देश्य और अपेक्षित रेंज का दस्तावेज़ीकरण करें ताकि भविष्य के परिवर्तन मिसमैच न लाएँ।
जब अधिक विशिष्ट प्रकार स्पष्टता में सुधार कर सकते हों, तो सामान्य प्रकारों का उपयोग करने से बचें।
निष्कर्ष
डेटा टाइप्स परिभाषित करते हैं कि आपका डेटाबेस आपके द्वारा स्टोर किए गए मानों को कैसे “समझता” है। ये स्टोरेज से लेकर प्रदर्शन और स्पष्टता तक हर चीज़ को प्रभावित करते हैं। इनके काम करने के तरीके को सीखना आपके डेटाबेस को अधिक विश्वसनीय और पूर्वानुमेय बनाता है।
इस विषय पर और पढ़ने के लिए देखें SQL Database Overview Tutorial और SQLite Data Types: A Close Look at Storage Classes। मैं PostgreSQL Summary Stats and Window Functions कोर्स की भी सिफारिश करता/करती हूँ, जो रनिंग टोटल्स और ऑर्डर्ड आँकड़े निकालना सिखाता है।
SQL में डेटा टाइप परिभाषित करता है कि कोई कॉलम किस प्रकार का डेटा स्टोर कर सकता है और वह डेटा क्वेरी या प्रोसेस होने पर कैसे व्यवहार करता है। यह स्टोरेज, वैलिडेशन, सॉर्टिंग, तुलना, और गणितीय ऑपरेशंस को प्रभावित करता है।