2009-12-21 5 views
49

मैं सबसे अधिक उपयोग किए गए डेटाबेस में relate column types पर कुछ रास्ता खोजने का प्रयास कर रहा हूं: MySQL, PostgreSQL, और SQLiteMySQL, PostgreSQL, और SQLite में डेटाबेस कॉलम प्रकारों की तुलना? (क्रॉस-मैपिंग)

यहां तक ​​कि मेरे पास अभी तक है, लेकिन मुझे डर है कि यह नहीं हुआ है और मुझे कुछ लोगों को किसी भी लापता प्रकार को खत्म करने में मदद करने के लिए अधिक अनुभव की आवश्यकता है।

MySQL     PostgreSQL   SQLite 

TINYINT     SMALLINT   INTEGER 
SMALLINT    SMALLINT 
MEDIUMINT    INTEGER 
BIGINT     BIGINT 
BIT      BIT     INTEGER 
_______________________________________________________ 

TINYINT UNSIGNED  SMALLINT   INTEGER 
SMALLINT UNSIGNED  INTEGER 
MEDIUMINT UNSIGNED  INTEGER 
INT UNSIGNED   BIGINT 
BIGINT UNSIGNED   NUMERIC(20) 
_______________________________________________________ 

DOUBLE     DOUBLE PRECISION REAL 
FLOAT     REAL    REAL 
DECIMAL     DECIMAL    REAL 
NUMERIC     NUMERIC    REAL 
_______________________________________________________ 

BOOLEAN     BOOLEAN    INTEGER 
_______________________________________________________ 

DATE     DATE    TEXT 
TIME     TIME 
DATETIME    TIMESTAMP 
_______________________________________________________ 

TIMESTAMP DEFAULT  TIMESTAMP DEFAULT TEXT 
NOW()     NOW() 
_______________________________________________________ 

LONGTEXT    TEXT    TEXT 
MEDIUMTEXT    TEXT    TEXT 
BLOB     BYTEA    BLOB 
VARCHAR     VARCHAR    TEXT 
CHAR     CHAR    TEXT 
_______________________________________________________ 

columnname INT   columnname SERIAL INTEGER PRIMARY 
AUTO_INCREMENT        KEY AUTOINCREMENT 
+0

मैं कहूंगा, और मुझे लगता है कि यह सच है, डेटाबेस प्रकारों के क्रॉस मैपिंग की अनुशंसा नहीं की जाती है, क्योंकि वहां (मेरी आंखों में) बिल्कुल सही समय पर आपको क्रॉस-मैप करने की आवश्यकता नहीं होती है। ऐसा हो सकता है कि आपको पीजी को माई में परिवर्तित करना है लेकिन उन्हें क्रॉस-मैप नहीं करना है। –

+0

तालिका में SQL सर्वर और ओरेकल क्यों नहीं जोड़ते? –

+2

कॉलम प्रकारों के इस क्रॉस-मैप का लक्ष्य इन तीन प्रकारों के बीच 'तालिका बनाएं' परिभाषाओं को समझाने (या यहां तक ​​कि उपयोग करने) को अधिक आसान बनाना है। चूंकि वे अक्सर उपयोग में हैं, इसलिए मुझे लगता है कि ओपन सोर्स कोड उनमें से किसी के लिए तैयार होना चाहिए। – Xeoncross

उत्तर

11

चीजें मैं अलग करना चाहते हैं की सूची: MySQL में

MEDIUMINT एक अजीब बतख (3 बाइट्स) है। मैं इससे बचूंगा, लेकिन अन्यथा इसे इंटेग्रर को भी मैप करें।

MySQL बुलेन (उर्फ बूल, उर्फ ​​टिन्यिनट (1)) पीजी बूलियन प्रकार के साथ संगत नहीं है। आप बूलियन अक्षर के रूप में उपयोग किए जाने वाले कार्यों के आधार पर ऐप्स को पोर्ट करने में सक्षम नहीं हो सकते हैं या नहीं भी कर सकते हैं। MySQL में, सत्य और गलत मानचित्र 1 और 0 पूर्णांक मानों पर। ऐसा लगता है कि पीजी बूलेन प्रकार स्ट्रिंग शाब्दिक नोटेशन का उपयोग करता है। तो ऐप्स पोर्टेबल हो सकते हैं या नहीं भी - कम से कम यह प्रतिस्थापन में कोई गिरावट नहीं है।

अंत में, अपने tabl में अंतिम पंक्ति के लिए मुझे लगता है कि SQLite वाक्यांश पढ़ना चाहिए:

INTEGER PRIMARY KEY AUTOINCREMENT 

यह मोटे तौर पर

BIGINT PRIMARY KEY AUTO_INCREMENT 
MySQL में

के बराबर है। postgres में, एक पूर्णांक स्तंभ सीरियल डेटाप्रकार परिणाम है, और के बारे में इस वसीयत एक ही रूप में MySQL के

INTEGER PRIMARY KEY AUTO_INCREMENT 

Postgres भी एक BIGSERIAL प्रकार है, जो धारावाहिक के रूप में, लेकिन एक INT प्रकार के बजाय एक BIGINT प्रकार के साथ एक ही है ।

मैं क्या याद किया:

मैं MySQL के लिए पूर्णांक (उर्फ INT) याद आ रही है। यह पीजी में INTEGER के लिए तुलनीय है। बहुत महत्वपूर्ण चूक: वचर और चार्ज। अर्थात्, MySQL और पीजी में VARCHAR, और MySQL और पीजी में CHAR समान हैं, लेकिन MySQL में इन प्रकारों की अधिकतम अधिकतम लंबाई होती है। MySQL में इन प्रकारों में पीजी 1 जीबी (बाइट्स) में अधिकतम 64kb से कम हो सकता है। वास्तविक लंबाई विनिर्देशक वर्णों की संख्या में व्यक्त किया जाता है, इसलिए यदि आपके पास बहु-बाइट वर्ण सेट है, तो आपको उस वर्णमाला के लिए निर्दिष्ट सैद्धांतिक अधिकतम लंबाई प्राप्त करने के लिए अधिकतम लंबाई को वर्णों की अधिकतम संख्या से विभाजित करना होगा। SQLite में, VARCHAR और CHAR पाठ करने के लिए दोनों के नक्शे

MySQL और पीजी में बीआईटी डेटाटाइप्स लगभग एक ही अर्थ विज्ञान है, लेकिन MySQL में बीआईटी डेटा प्रकार की अधिकतम लंबाई 64 (बिट)

मुझे लगता है कि है MySQL VARBINARY डेटा प्रकार पीजी के BYTEA डेटाटाइप से सबसे तुलनीय है। (लेकिन वास्तव में MySQL के ब्लॉब प्रकार भी है कि करने के लिए नक्शे)

MySQL में फ्लोट प्रकार (SQLite में भी और वास्तविक) postgres में असली के बराबर होना चाहिए MySQL में दशमलव प्रकार postgres में दशमलव के बराबर है, कि को छोड़कर postgres, प्रकार परिशुद्धता पर एक arbtrary सीमा लागू नहीं करता है, जबकि MySQL में अधिकतम परिशुद्धता (मुझे विश्वास है) 70. (यानी, 70 संख्या पदों) MySQL और Postgres दोनों के लिए, NUMERIC DECIMAL प्रकार के लिए उपनाम है ।

+0

एक और अंतर है, पीजी में आप केवल वर्चर() का उपयोग करते हैं जब आपके पास प्रदान की गई बाधा का आह्वान करने का उचित कारण होता है। MySQL में आप टेक्स्ट के बड़े आंतरिक रूप से इनलाइन ब्लॉब के लिए ऐसा करते हैं जो जल्दी से चलता है। पीजी में यह धीमा चलता है, और मेरा कमरा लेता है। पीजी में आप लगभग वर्कर() का उपयोग नहीं करेंगे। –

+4

इवान कैरोल, यह दिलचस्प है। तो व्यक्ति के नाम, उत्पाद नाम, संक्षिप्त (कहें, 255 से कम) विवरण जैसे पाठ के काफी छोटे बिट्स को स्टोर करने के लिए पीजी में क्या उपयोग करना चाहिए? बस पाठ? –

+3

पोस्टग्रेस बूलियन स्ट्रिंग शाब्दिक प्रकार नहीं हैं, वे केवल उसी तरह दिखते हैं। यदि आप उन्हें पूर्णांक के रूप में आते हैं, तो 1, या NULL को अनुचित के रूप में बाहर निकालें, इसके विपरीत यदि आपके पास 0,1 या पूर्ण पूर्णांक हैं तो आप उन्हें बुलियन में डाल सकते हैं। कॉपी करें ... संख्याओं को स्वीकार करने से, लेकिन INSERT को संख्या के चारों ओर एक स्पष्ट कलाकार या उद्धरण की आवश्यकता है। तो '0', कास्ट (0 बुलेन के रूप में), 'एफ', और झूठी सभी बूलियन की अपेक्षा रखने वाले एक सम्मिलन में काम करेंगे। – user340140

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