شرح صفوف ومحتوى الفقرة
في قواعد بيانات MySQL 8 الحديثة التي تعتمد الترميز القياسي utf8mb4، يستهلك الحرف الواحد ما بين 1 بايت و4 بايتات في الذاكرة. ولهذا السبب يوفر محرك MySQL دالتين مختلفتين تماماً لقياس الطول يجب عدم الخلط بينهما:
- دالة
CHAR_LENGTH(str): تحسب عدد الأحرف الفعلي الذي يراه المستخدم بغض النظر عن حجم البايتات؛ ولذلك يجب استخدامها دائماً عند التحقق من طول الأسماء أو كلمات المرور أو النصوص العربية. - دالة
LENGTH(str): تحسب عدد البايتات الخام في الذاكرة؛ فالحرف الإنجليزي يستهلك1 byte، بينما يستهلك كل حرف عربي2 bytes، ويستهلك رمز الإيموجي4 bytes.
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;