mysql - الخلية: VARCHAR كبيرة مقابل TEXT؟




messages (3)

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

هل هناك مبرر للذهاب مع VARCHAR (3000) أو TEXT؟ هناك شيء حول كتابة VARCHAR (3000) التي تبدو غير بديهية إلى حد ما. مررت بمشاركات مشابهة أخرى على Stack Overflow ولكن سيكون من الجيد الحصول على طرق عرض محددة لهذا النوع من تخزين الرسائل الشائعة.


إخلاء المسؤولية: لست خبيرًا في MySQL ... ولكن هذا هو فهمي للقضايا.

أعتقد أن TEXT مخزنة خارج صف mysql ، بينما أعتقد أن VARCHAR مخزنة كجزء من الصف. هناك حد أقصى للصف لصفوف mysql .. بحيث يمكنك تحديد مقدار البيانات الأخرى التي يمكنك تخزينها في صف باستخدام VARCHAR.

أيضا بسبب VARCHAR تشكل جزءا من الصف ، وأظن أن الاستعلامات التي تبحث في هذا المجال ستكون أسرع قليلا من تلك التي تستخدم قطعة TEXT.


فقط لتوضيح أفضل الممارسات:

  1. يجب أن يتم تخزين رسائل نصية دائمًا على هيئة TEXT (تنتهي في النهاية إلى حدٍ كبير)

  2. يجب تخزين سمات السلسلة كـ VARCHAR (اسم المستخدم الوجهة ، الموضوع ، إلخ ...).

أعي أنك تمتلك حدًا أماميًا ، وهو أمر رائع حتى لا يكون. * ابتسامة * الخدعة هي التفكير في DB بشكل منفصل عن التطبيقات التي تتصل به. فقط لأن أحد التطبيقات يضع حداً للبيانات ، لا يعني أن البيانات محدودة بشكل جوهري.

ماذا عن الرسائل نفسها التي تجبرهم على ألا يتجاوز عددهم 3000 حرف؟ إذا كان مجرد قيد تطبيق تعسفي (على سبيل المثال ، بالنسبة لمربع نص أو شيء ما) ، فاستخدم حقل TEXT في طبقة البيانات.


يتم تخزين TEXT و BLOB خارج الجدول مع الجدول فقط وجود مؤشر إلى موقع التخزين الفعلي.

يتم تخزين VARCHAR مضمنة مع الجدول. يعد VARCHAR أسرع عندما يكون الحجم معقولاً ، ويكون المقايضة بشكل أسرع يعتمد على بياناتك وعلى أجهزتك ، فأنت تريد وضع سيناريو حقيقي مع بياناتك.





varchar