ما الفرق بين LENGTH وCHAR_LENGTH عند قياس النص العربي؟

متوسطقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

تقيس الدالة 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 من الأساسيات للاحتراف.

اختبر فهمك

ما القيمتان اللتان يعيدهما الاستعلام بالترتيب bytes ثم characters؟

CREATE TABLE books (
  title VARCHAR(10) CHARACTER SET utf8mb4
);
INSERT INTO books (title)
VALUES (CONVERT(0xD8A8 USING utf8mb4));
SELECT LENGTH(title) AS bytes,
       CHAR_LENGTH(title) AS characters
FROM books;