لماذا يقوم نص الصب بمثابة نص Varchar دون تحديد طول النص عند 30 حرفا؟

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

سؤال

كنت أبحث في قاعدة بيانات MS-SQL Server 2005 للتأكد من أن حقل نص معين كان دائما مضاعفا من 8 في الطول. عندما ركضت الاستعلام التالي، حصلت على أن عدة صفوف كانت بطول 30. ولكن عندما التحقيق في هذه السجلات، وجدت أنهم كانوا أطول من ذلك.

select distinct len(cast(textfield as varchar)) from tablename

ومع ذلك، إذا قمت بتحديد طول Varchar كشيء أطول (كما هو الحال في الاستعلام التالي)، فإنه يعمل بشكل جيد.

select distinct len(cast(textfield as varchar(1000))) from tablename

أي شخص يعرف لماذا تقيمه إلى 30 وإذا كان هذا إعداد قابل للتكوين؟

نصائح أخرى

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

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

إنه رقم تعسفي، وبقدر ما أعرفه غير قابل للتكوين. لا أستطيع التفكير في القضية التي لا تريد تحديد طولها.

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