شبكة تعلم مع ناو

هل طول VARCHAR يقاس بالحروف أم بالبايتات؟

العدد في تعريف VARCHAR يحدد الحد الأقصى لعدد المحارف، وليس عدد البايتات التي تشغلها القيمة. هذا الفرق مهم عند استخدام ترميز مثل utf8mb4، لأن المحارف قد تحتاج إلى أعداد مختلفة من البايتات. لذلك يمكن لنصين متساويين في عدد المحارف أن يختلفا في حجم البيانات الفعلي.

تستخدم CHAR_LENGTH لقياس عدد المحارف، بينما تعيد LENGTH عدد البايتات. في المثال، كلمة نور تتكون من ثلاثة محارف عربية، ويحتاج كل منها إلى بايتين في الترميز المحدد، فيكون الحجم ستة بايتات. لا يجعل ذلك الإدخال مخالفًا لتعريف VARCHAR(3)، لأن حد العمود هنا ثلاثة محارف. ومع ذلك، تبقى حدود حجم الصف والتخزين بالبايتات مهمة عند تصميم أعمدة كبيرة؛ فعدد المحارف وحده لا يصف جميع قيود السعة الممكنة.

مثال

CREATE TABLE customers (
  name VARCHAR(3) CHARACTER SET utf8mb4
);
INSERT INTO customers (name) VALUES (_utf8mb4'نور');
SELECT CHAR_LENGTH(name) AS chars,
       LENGTH(name) AS bytes
FROM customers;

باختصار: يحدد VARCHAR(3) ثلاثة محارف، وقد تحتاج هذه المحارف إلى أكثر من ثلاثة بايتات.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.