मुझे लगता है कि PostgreSQL स्वचालित रूप से पर्दे के पीछे के प्रकार का पता लगाने की कोशिश करता है और लिनक्स में यह '' से छुटकारा पाने की कोशिश करता है, कुछ तुलनाएं लोकेल पर भी आधारित होती हैं।
-
इस प्रकार,
' 2' > '10'
हो जाता है'2'>'10'
और तुलना है'2'>'1'
; वे बराबर नहीं हैं, इसलिए शेष स्ट्रिंग के साथ जारी रखने की कोई आवश्यकता नहीं है, औरascii('2')
ascii('1')
. से बड़ा है , इसलिए यह सत्य का मूल्यांकन करता है। -
यदि यह एक समानता ऑपरेशन था (जैसे '22' ='22') तो इसका परिणाम गलत होगा क्योंकि पोस्टग्रेज बाइट तुलना द्वारा बाइट करता है। यह महत्वपूर्ण है क्योंकि तुलना करते समय इंजन दो अलग-अलग एल्गोरिदम का उपयोग करता है।
-
यदि आप टाइपकास्टिंग के माध्यम से प्रकार निर्दिष्ट करते हैं, तो यह अंतरिक्ष नियमों को ओवरराइड नहीं करेगा (
' '=>''
)।
इसका श्रेय भी जाता है: #postgresql . में रोडियम टॉड और पीयर्स