MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

मारियाडीबी लंबाई () बनाम लंबाई ():क्या अंतर है?

संस्करण 10.3.1 के बाद से, मारियाडीबी ने LENGTH() . दोनों को शामिल किया है फ़ंक्शन और एक LENGTHB() समारोह।

उस दूसरे में एक B है नाम के अंत में। तो यह एक तरह का है Length A और Length B , सिवाय इसके कि Length A A नहीं है ।

भ्रमित?

मैं था, जब मैंने पहली बार LENGTHB() . का सामना किया था . मुझे पहले से ही LENGTH() के बारे में पता था , तो "बी" संस्करण की आवश्यकता क्यों है?

आइए जानें।

Oracle संगतता

मारियाडीबी अंक 12783 के अनुसार, LENGTHB() . से पहले पेश किया गया था (और LENGTH() . से पहले संशोधित किया गया था) चीजें इस तरह काम करती थीं:

  • MariaDB फ़ंक्शन का अनुवाद करता है LENGTH() SQL मानक फ़ंक्शन के लिए OCTET_LENGTH()
  • Oracle फंक्शन का अनुवाद करता है LENGTH() SQL मानक फ़ंक्शन के लिए CHAR_LENGTH()

इसके बाद मारियाडीबी के LENGTH() . को बदलने का निर्णय लिया गया यह किस SQL ​​​​मोड में चल रहा है, इसके आधार पर यह अलग तरह से व्यवहार करता है। विशेष रूप से:

  • डिफ़ॉल्ट मोड में चलने पर (यानी sql_mode=DEFAULT ), मारियाडीबी LENGTH() का अनुवाद करना जारी रखेगा करने के लिए OCTET_LENGTH()
  • हालांकि, Oracle मोड में चलने पर (यानी sql_mode=ORACLE ), यह अनुवाद करता है LENGTH() करने के लिए CHAR_LENGTH() इसके बजाय।

पेश है LENGTHB()

जो हमें LENGTHB() पर लाता है समारोह।

LENGTHB() फ़ंक्शन को उसी कार्य के भाग के रूप में जोड़ा गया था।

LENGTHB() OCTET_LENGTH() . का पर्यायवाची है SQL मोड की परवाह किए बिना। दूसरे शब्दों में, LENGTHB() OCTET_LENGTH() में अनुवाद करता है जब sql_mode=DEFAULT और जब sql_mode=ORACLE

यह हमें LENGTHB() . का उपयोग करने में सक्षम बनाता है उपयोगकर्ता के sql_mode . से प्रभावित होने की चिंता किए बिना हमारे कोड में सेटिंग्स।

अंतर

इन दो कार्यों के बीच का अंतर निम्न तालिका में बताया गया है।

कार्य डिफ़ॉल्ट मोड Oracle मोड
LENGTH() बाइट्स की संख्या लौटाता है। वर्णों की संख्या लौटाता है।
LENGTHB() बाइट्स की संख्या लौटाता है। बाइट्स की संख्या लौटाता है।

ध्यान दें कि यह अंतर केवल मारियाडीबी 10.3.1 से मौजूद है। उससे पहले, LENGTHB() मौजूद नहीं है, और LENGTH() बस OCTET_LENGTH() में अनुवाद करता है ।

उदाहरण

यहां एक उदाहरण दिया गया है जो LENGTH() . के बीच के अंतर को दर्शाता है और LENGTHB()

आइए अपने सत्र को डिफ़ॉल्ट मोड का उपयोग करने के लिए सेट करें:

SET SESSION sql_mode=DEFAULT;

मेरा सत्र शायद पहले से ही डिफ़ॉल्ट मोड में था, लेकिन इसे स्पष्ट रूप से सेट करने में कोई बुराई नहीं है।

अब चलते हैं LENGTH() और LENGTHB() इसी तर्क के साथ:

SELECT 
    LENGTH('café'),
    LENGTHB('café');

परिणाम:

+-----------------+------------------+
| LENGTH('café')  | LENGTHB('café')  |
+-----------------+------------------+
|               5 |                5 |
+-----------------+------------------+

इसलिए, जब डिफ़ॉल्ट मोड में, वे दोनों समान मान लौटाते हैं।

इस मामले में, वे दोनों 5 returned लौट आए , क्योंकि उस स्ट्रिंग में 5 बाइट्स हैं (é वर्ण 2 बाइट्स का उपयोग करता है, और अन्य सभी 1 बाइट प्रत्येक का उपयोग करते हैं)।

आइए अब Oracle मोड पर स्विच करें:

SET SESSION sql_mode=ORACLE;

अब उपरोक्त कथन को फिर से चलाते हैं:

SELECT 
    LENGTH('café'),
    LENGTHB('café');

परिणाम:

+-----------------+------------------+
| LENGTH('café')  | LENGTHB('café')  |
+-----------------+------------------+
|               4 |                5 |
+-----------------+------------------+

इस बार दोनों कार्यों में अंतर है। इस बार LENGTH() लौटा 4 . यह पहले से 1 कम है।

ऐसा इसलिए है क्योंकि LENGTH() Oracle मोड में अलग तरह से व्यवहार करता है। जैसा कि बताया गया है, जब sql_mode=ORACLE , LENGTH() फ़ंक्शन का अनुवाद CHAR_LENGTH() . में होता है , जो वर्णों की संख्या देता है - बाइट्स नहीं।

पिछले उदाहरण में, LENGTH() बाइट्स की संख्या लौटा दी, क्योंकि जब sql_mode=DEFAULT , यह OCTET_LENGTH() . में अनुवाद करता है ।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी में RLIKE कैसे काम करता है

  2. मारियाडीबी में उपलब्ध दिनांक और समय स्थान

  3. मारियाडीबी में सबटाइम () कैसे काम करता है?

  4. भंडारण इंजन विकल्प:एरिया

  5. मारियाडीबी कनेक्टर/पायथन बीटा अब उपलब्ध है