मैंने Oracle और SQL सर्वर के बीच रिक्त स्थान को संभालने के बारे में एक प्रयोग किया क्योंकि मेरे काम के लिए Oracle का उपयोग करते समय अंतर देखा गया था।
(Oracle का संस्करण Oracle 19c है और SQL सर्वर का संस्करण SQL Server 2019 है क्योंकि ये मेरे पीसी में पहले ही स्थापित हो चुके थे।)
प्रयोग
Oracle
मैंने निम्नलिखित तालिका और डेटा के तहत एक प्रयोग किया।
CREATE TABLE CompareTestTable
(
Seq NUMBER
,ColCHAR CHAR(10)
,ColVARCHAR VARCHAR2(10)
);
INSERT INTO CompareTestTable VALUES( 1, 'aaa', 'bbb' ); -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' ); -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' ); -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' ); -- Spaces after and before a string
select * from CompareTestTable where ColCHAR = 'aaa'; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa '; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa'; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa '; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = 'bbb'; -- Hit SEQ=1 record
select * from CompareTestTable where ColVARCHAR = 'bbb '; -- Hit SEQ=2 record
select * from CompareTestTable where ColVARCHAR = ' bbb'; -- Hit SEQ=3 record
select * from CompareTestTable where ColVARCHAR = ' bbb '; -- Hit SEQ=4 record
कॉलम प्रकार चार होने पर स्ट्रिंग के बाद की जगह को अनदेखा कर दिया जाता है।
हालांकि, Varchar2 की स्थिति में, स्ट्रिंग के बाद या उससे पहले की जगह को अनदेखा नहीं किया जाता है।
विवरण निम्नलिखित है
https://docs.oracle.com/cd/B13789_01/server.101/b10759/sql_elements002.htm#:~:text=Nonpadded%20Comparison%20Semantics,-Oracle%20compares%20two&text=If%20two%20values%20of% 20भिन्न,%20मान%20%20माना जाता है%20बराबर।
SQL सर्वर
ओरेकल के लिए एक ही मामले के रूप में, मैंने SQL सर्वर पर निम्न तालिका और डेटा के तहत एक प्रयोग किया।
CREATE TABLE CompareTestTable
(
Seq INT
,ColCHAR CHAR(10)
,ColVARCHAR VARCHAR(10)
)
INSERT INTO CompareTestTable VALUES( 1, 'aaa', 'bbb' ); -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' ); -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' ); -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' ); -- Spaces after and before a string
select * from CompareTestTable where ColCHAR = 'aaa'; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa '; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa'; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa '; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = 'bbb'; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = 'bbb '; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = ' bbb'; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = ' bbb '; -- Hit SEQ=3,4 records
चार का परिणाम ओरेकल के समान है।
हालांकि, वर्चर की स्थिति में, परिणाम Oracle और SQL सर्वर के बीच भिन्न होता है, स्ट्रिंग के बाद या उससे पहले के रिक्त स्थान को अनदेखा किया जाता है।
इसलिए, ओरेकल और एसक्यूएल सर्वर के बीच के अंतर के कारण वर्चर का उपयोग करते समय यह ध्यान दिया जाना चाहिए।