تقيس الدالة LENGTH طول النص بالبايتات، بينما تقيس CHAR_LENGTH عدد الأحرف. قد تتساوى النتيجتان في نص إنجليزي بسيط يستخدم حرفًا من بايت واحد، لكن هذا لا يعني أن الدالتين متطابقتان. يظهر الفرق بوضوح عند استخدام ترميز يدعم أحرفًا متعددة البايتات، مثل utf8mb4 الشائع في التطبيقات متعددة اللغات.
إذا أردت التحقق من عدد الأحرف في اسم عربي، فاختيار مقياس البايتات قد يعطي رقمًا أكبر مما تتوقع. أما إذا كنت تفحص الحجم بالبايتات، فإن LENGTH هي الدالة المناسبة لهذا السؤال. ينبغي تحديد المقصود بالطول قبل بناء شرط أو تفسير نتيجة تظهر في تقرير.
مثال
SELECT LENGTH(CONVERT(0xD8A8 USING utf8mb4)) AS bytes,
CHAR_LENGTH(CONVERT(0xD8A8 USING utf8mb4)) AS characters;
يمثل التسلسل المستخدم الحرف العربي باء بترميز UTF-8. لذلك يعيد المثال بايتين مقابل حرف واحد. استخدام التمثيل السداسي يجعل الترميز المقصود واضحًا دون الاعتماد على طريقة إرسال النص من المحرر.
باختصار: استخدم LENGTH للبايتات، وCHAR_LENGTH لعدد الأحرف، خصوصًا عند التعامل مع النص العربي.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.