انتقل إلى محتوى الدرس

CHAR LENGTH vs Byte LENGTH طول الأحرف مقابل البايتات

تعلّم دوال معالجة النصوص وحساب طول النصوص العربية UTF8MB4 في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
8 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

في قواعد بيانات MySQL 8 الحديثة التي تعتمد الترميز القياسي utf8mb4، يستهلك الحرف الواحد ما بين 1 بايت و4 بايتات في الذاكرة. ولهذا السبب يوفر محرك MySQL دالتين مختلفتين تماماً لقياس الطول يجب عدم الخلط بينهما:

  • دالة CHAR_LENGTH(str): تحسب عدد الأحرف الفعلي الذي يراه المستخدم بغض النظر عن حجم البايتات؛ ولذلك يجب استخدامها دائماً عند التحقق من طول الأسماء أو كلمات المرور أو النصوص العربية.
  • دالة LENGTH(str): تحسب عدد البايتات الخام في الذاكرة؛ فالحرف الإنجليزي يستهلك 1 byte، بينما يستهلك كل حرف عربي 2 bytes، ويستهلك رمز الإيموجي 4 bytes.
مخطط يقارن بين CHAR_LENGTH و LENGTH للنصوص متعددة البايتات UTF8MB4 ودوال الدمج CONCAT_WS والاقتطاع والتنظيف في MySQL 8
SQL
SELECT
  CHAR_LENGTH('CloseTag') AS en_chars,
  LENGTH('CloseTag') AS en_bytes,
  CHAR_LENGTH(_utf8mb4 0xD985D8B5D8B1) AS ar_chars,
  LENGTH(_utf8mb4 0xD985D8B5D8B1) AS ar_bytes;