MySQL: لماذا استخدام Varchar (20) بدلا من varchar (255)؟ [مكرر

StackOverflow https://stackoverflow.com/questions/1262174

  •  12-09-2019
  •  | 
  •  

سؤال

ممكن مكررة:
هل هناك عيوب لاستخدام Varchar عام (255) لجميع الحقول القائمة على النص؟

في MySQL، يمكنك اختيار طول لنوع Varchar Field. القيم المحتملة هي 1-255.

ولكن ما هي مزاياها إذا كنت تستخدم varchar (255) هذا هو الحد الأقصى بدلا من varchar (20)؟ بقدر ما أعرف، يعتمد حجم الإدخالات فقط على الطول الحقيقي للسلسلة المدرجة.

حجم (بايت) = الطول + 1

لذلك إذا كان لديك كلمة "مثال" في حقل varchar (255)، فسيكون لها 8 بايت. إذا كان لديك في حقل Varchar (20)، فسيكون له 8 بايت أيضا. ماهو الفرق؟

آمل أن تتمكن من مساعدتي. شكرا مقدما!

هل كانت مفيدة؟

المحلول

الدفع: مرجع Varchar.

باختصار، لا يوجد فرق كبير ما لم تذهب إلى حجم 255 في varchar الخاص بك الذي سيتطلب بايت آخر لبادئة الطول.

يشير الطول إلى مزيد من القيود على البيانات المخزنة في العمود من أي شيء آخر. هذا يقيد بطبيعته الحد الأقصى لحجم التخزين للعمود أيضا. IMHO، يجب أن يكون الطول معنى فيما يتعلق بالبيانات. إذا كان لديك تخزين الضمان الاجتماعي # لا معنى له بضبط الطول إلى 128 على الرغم من أنه لا يكلفك أي شيء في التخزين إذا كان كل ما تخزنه بالفعل هو SSN.

نصائح أخرى

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

على سبيل المثال، إذا كنت تخزن الرمز البريدي في المملكة المتحدة، فأنت بحاجة فقط إلى 8 أحرف. يساعد إعداد هذا الحد في وضع مسح نوع البيانات التي تخزنها. إذا اخترت 255 حرفا، فسيكون الأمر فقط الخلط بين الأمور.

لا أعرف عن MySQL ولكن في SQL Server، سيتيح لك تحديد الحقول بحيث يكون إجمالي عدد البايتات المستخدمة أكبر من إجمالي عدد البايتات التي يمكن تخزينها بالفعل في سجل. هذا أمر سيئ. عاجلا أم آجلا، سوف تحصل على صف حيث يتم الوصول إلى الحد ولا يمكنك إدراج البيانات.

من الأفضل بكثير تصميم هيكل قاعدة البيانات الخاصة بك للنظر في حدود حجم الصف.

بالإضافة إلى ذلك نعم، لا تريد أن تضع الأشخاص 200 حرف في حقل يجب أن يكون فيه القيمة القصوى 10. إذا فعلوا ذلك، فهو دائما دائما بيانات سيئة دائما.

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

لديهم كلمة لقواعد البيانات مع عدم وجود تكامل البيانات - عديمة الفائدة.

هناك اختلاف نصف دلالي (وأعتقد أن هذا هو الفرق الوحيد): إذا حاولت ملء 30 حرفا غير الفضائي في Varchar (20)، فسوف ينتج خطأ، في حين أن ذلك سينجحه varchar (255). لذلك هو في المقام الأول قيود إضافية.

حسنا، إذا كنت ترغب في السماح بإدخال أكبر، أو الحد من حجم الدخول ربما.

على سبيل المثال، قد يكون لديك first_name باعتبارها varchar 20، ولكن ربما street_address باعتبارها varchar 50 منذ 20 قد لا يكون مساحة كافية. في الوقت نفسه، قد ترغب في التحكم في كيفية الحصول على حجم القيمة الكبيرة.

بمعنى آخر، قمت بتعيين سقف من حجم قيمة معينة، من الناحية النظرية لمنع الجدول (وإدخالات الفهرس / الفهرس المحتمل) من الحصول على كبير جدا.

يمكنك فقط استخدام Char وهو عرض ثابت أيضا، ولكن على عكس varchar الذي يمكن أن يكون أصغر، منصات char القيم (على الرغم من أن هذا يجعل الوصول إلى SQL أسرع.

من وجهة نظر قاعدة بيانات الأداء الحكيم أنا لا أصدق أنه سيكون هناك فرق.

ومع ذلك، أعتقد أن الكثير من القرار بشأن الطول لاستخدامه يأتي إلى ما تحاول تحقيقه وتوثيق النظام لقبول البيانات التي تحتاجها فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top