"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > VARCHAR مقابل TEXT في MySQL: ما هي الاختلافات الرئيسية؟

VARCHAR مقابل TEXT في MySQL: ما هي الاختلافات الرئيسية؟

تم النشر بتاريخ 2025-01-24
تصفح:406

VARCHAR vs. TEXT in MySQL: What are the key differences?

الفرق بين VARCHAR و TEXT في MySQL

عند إنشاء جدول في MySQL، يجب تحديد طول عمود نوع VARCHAR بشكل واضح. ومع ذلك، بالنسبة لنوع TEXT، لا يلزم تحديد الطول. إذن ما هو الفرق بين VARCHAR و TEXT؟

TL;DR

TEXT

    الحد الأقصى للطول الثابت 65535 حرفًا (لا يمكن تحديد الحد الأقصى للطول)
  • القرص المشغول مساحة 2 بايت ج، حيث ج لتخزين طول السلسلة
  • لا يمكن فهرستها (بالكامل)، تحتاج إلى تحديد طول البادئة

VARCHAR(M) ] &&&]

الحد الأقصى لطول الأحرف M المتغيرة
  • يجب أن يكون M بين 1 و 65535
  • يشغل مساحة القرص 1 c بايت (M ≥ 255) أو 2 c بايت (256 ≥ M ≥ 65535)، حيث c هو طول السلسلة المخزنة
  • قابل للفهرسة
  • وصف تفصيلي
&&&]TEXT له حد أقصى ثابت لطول 2¹⁶-1 = 65535 حرفًا، بينما VARCHAR الحد الأقصى لطول متغير، يصل إلى 2¹⁶-1. لذلك، حجم النص غير قابل للتحديد، لكن حجم VARCHAR قابل للتحديد.

الفرق الآخر هو أن الفهارس (باستثناء فهارس النص الكامل) غير مسموح بها في أعمدة TEXT. ولذلك، لفهرسة هذا العمود، يجب عليك استخدام VARCHAR. ولكن يرجى ملاحظة أن طول الفهرس محدود أيضًا إذا كان عمود VARCHAR طويلًا جدًا، فيمكن للفهرس استخدام الأحرف القليلة الأولى من عمود VARCHAR فقط (راجع وثائق إنشاء الفهرس).

يجب أيضًا استخدام VARCHAR إذا كنت تعلم أن الحد الأقصى لطول سلسلة الإدخال المحتملة هو M فقط، مثل رقم الهاتف أو الاسم. بعد ذلك، يمكنك استخدام VARCHAR(30) بدلاً من TINYTEXT أو TEXT، بحيث إذا حاول شخص ما حفظ نص Lord of the Rings الكامل في العمود الذي تستخدمه لتخزين أرقام الهواتف، فما عليك سوى تخزين أول 30 حرفًا: )

تحرير:

إذا كان النص المراد تخزينه في قاعدة البيانات أطول من 65535 حرفًا، فيجب عليك تحديد MEDIUMTEXT أو LONGTEXT، ولكن كن حذرًا: الحد الأقصى لطول السلسلة المخزنة هو 16 ميجا بايت للنص المتوسط ​​و4 جيجا بايت للنص الطويل. إذا كنت تستخدم LONGTEXT وتحصل على البيانات من خلال PHP (على الأقل إذا كنت تستخدم mysqli ولا تستخدم وظيفة store_result)، فقد تحصل على خطأ في تخصيص الذاكرة لأن PHP ستحاول تخصيص 4 جيجابايت من الذاكرة للتأكد من أن السلسلة بأكملها يمكن يتم تخزينها مؤقتا. يمكن أن يحدث هذا بلغات أخرى إلى جانب PHP أيضًا.

ومع ذلك، يجب عليكدائما

التحقق من الإدخال قبل تخزين البيانات في قاعدة البيانات

(هل هي طويلة جدًا؟ هل تحتوي على تعليمات برمجية غريبة؟). يرجى ملاحظة: بالنسبة لكلا النوعين، تعتمد مساحة القرص المطلوبة فقط على طول السلسلة المخزنة، وليس على الحد الأقصى للطول. على سبيل المثال، إذا كنت تستخدم مجموعة الأحرف latin1 وقمت بتخزين النص "اختبار" في VARCHAR(30) وVARCHAR(100) وTINYTEXT، فسوف يتطلب الأمر دائمًا 5 بايت (بايت واحد لتخزين طول السلسلة، وكل حرف بايت واحد) . إذا قمت بتخزين نفس النص في عمود VARCHAR(2000) أو TEXT، فسوف يتطلب أيضًا نفس المساحة، ولكن في هذه الحالة سوف يستغرق 6 بايت (2 بايت لتخزين طول السلسلة، كلمة واحدة لكل حرف فيستيفال). راجع الوثائق لمزيد من المعلومات.

أخيرًا، أود أن أضيف أن كلا من TEXT وVARCHAR هما نوعان من البيانات متغيرة الطول، لذلك من المرجح أن يقللا من عدد المسافات الفارغة اللازمة لتخزين البيانات

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3