MySQL में, कई बार length()
फ़ंक्शन और char_length()
फ़ंक्शन बिल्कुल वही परिणाम प्रदान करेगा। हालांकि, ऐसे समय भी होते हैं जहां परिणाम पूरी तरह से अलग होंगे। यही कारण है।
सबसे पहले, इनमें से प्रत्येक फ़ंक्शन की परिभाषा यहां दी गई है:
char_length()
- वर्णों में मापी गई स्ट्रिंग की लंबाई लौटाता है।
length()
- बाइट्स में मापी गई स्ट्रिंग की लंबाई देता है।
नोटिस "वर्ण" बनाम "बाइट्स" - एक को वर्णों . में मापा जाता है , दूसरे को बाइट्स . में मापा जाता है ।
कई मामलों में, बाइट्स की संख्या स्ट्रिंग में वर्णों की संख्या के समान होगी, लेकिन हमेशा ऐसा नहीं होता है। प्रति वर्ण उपयोग किए जाने वाले बाइट्स की संख्या इस बात पर निर्भर करती है कि डेटा कैसे संग्रहीत किया जाता है। उदाहरण के लिए, यदि स्ट्रिंग को यूनिकोड डेटा के रूप में संग्रहीत किया जाता है, तो प्रति वर्ण 2 बाइट्स होंगे।
यहां ASCII टेक्स्ट का उपयोग करके एक मूल उदाहरण दिया गया है (जहां दोनों फ़ंक्शन समान परिणाम देते हैं):
SELECT CHAR_LENGTH('Lit'), LENGTH('Lit');
परिणाम:
+--------------------+---------------+ | CHAR_LENGTH('Lit') | LENGTH('Lit') | +--------------------+---------------+ | 3 | 3 | +--------------------+---------------+
और अक्सर हम वही परिणाम प्राप्त करेंगे यदि स्ट्रिंग को डेटाबेस में संग्रहीत किया जाता है:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
परिणाम:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 3 | +-------------------------+--------------------+
हालाँकि, यदि हम डेटा को यूनिकोड के रूप में संग्रहीत करने के लिए डेटाबेस कॉलम को बदलते हैं:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
और फिर वही क्वेरी फिर से चलाएँ:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
हमें एक अलग परिणाम मिलता है:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 6 | +-------------------------+--------------------+
ऐसा इसलिए है क्योंकि यूनिकोड प्रत्येक वर्ण को 2 बाइट्स के रूप में संग्रहीत करता है।
यह datalength()
. के बीच के अंतर के समान है और len()
टी-एसक्यूएल में।
MySQL में octet_length()
भी है फ़ंक्शन, जो length()
. का पर्याय है ।