سؤال

لدي بيانات حرف متغيرة الطول وأريد تخزينها في قاعدة بيانات SQL Server (2005). أريد أن أتعلم بعض أفضل الممارسات حول كيفية اختيار Text SQL Type أو اختر نوع Varchar SQL أو إيجابيات وسلبيات في الأداء / البصمة / الوظيفة.

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

المحلول

إذا كنت تستخدم SQL Server 2005 أو إصدار أحدث، استخدم varchar(MAX). وبعد ال text يتم إهمال نوع البيانات ويجب عدم استخدامه لعمل تطوير جديد. من المستندات:

الأهمية

ntext , text, ، و image ستتم إزالة أنواع البيانات في إصدار مستقبلي من Microsoft SQL Server. تجنب استخدام أنواع البيانات هذه في أعمال تطوير جديدة، وتخطط لتعديل التطبيقات التي تستخدمها حاليا. يستخدم nvarchar (ماكس), varchar (ماكس), ، و varbinary (ماكس) في حين أن.

نصائح أخرى

TEXT يستخدم لقطع كبيرة من بيانات السلسلة. إذا كان طول الحقل يمثل عتبة معينة، يتم تخزين النص خارج الصف.

VARCHAR يتم تخزينه دائما في الصف ولديه حد 8000 الشخصيات. إذا حاولت إنشاء VARCHAR(x), ، أين X> 8000., ، يمكنك الحصول على خطأ:

الخادم: MSG 131، المستوى 15، الحالة 3، السطر 1

الحجم () المعطى للنوع "varchar" يتجاوز الحد الأقصى المسموح به لأي نوع بيانات (8000)

هذه القيود الطول لا تهم VARCHAR(MAX) في SQL Server 2005., ، والتي قد يتم تخزينها من الصف، تماما مثل TEXT.

لاحظ أن MAX ليس نوعا من الثابت هنا، VARCHAR و VARCHAR(MAX) هي أنواع مختلفة جدا، وهذا الأخير قريب جدا من TEXT.

في الإصدارات السابقة من خادم قاعدة البيانات لا يمكنك الوصول إلى TEXT مباشرة، يمكنك فقط الحصول على TEXTPTR واستخدامها في READTEXT و WRITETEXT المهام.

في SQL Server 2005. يمكنك الوصول مباشرة TEXT الأعمدة (على الرغم من أنك لا تزال بحاجة إلى وضع صريح ل VARCHAR لتعيين قيمة لهم).

TEXT جيد:

  • إذا كنت بحاجة إلى تخزين النصوص الكبيرة في قاعدة البيانات الخاصة بك
  • إذا كنت لا تبحث عن قيمة العمود
  • إذا حددت هذا العمود نادرا ولا تنضم إليه.

VARCHAR جيد:

  • إذا قمت بتخزين السلاسل الصغيرة
  • إذا كنت تبحث في قيمة السلسلة
  • إذا قمت دائما بتحديدها أو استخدامها في الانضمام.

بواسطة اختيار. أقصد هنا إصدار أي استفسارات تعيد قيمة العمود.

بواسطة يبحث أقصد هنا إصدار أي استفسارات تؤدي نتائجها إلى قيمة TEXT أو VARCHAR عمودي. وهذا يشمل استخدامه في أي JOIN أو WHERE شرط.

كما TEXT يتم تخزينه خارج الصف، والاستفسارات لا تنطوي على TEXT العمود عادة ما تكون أسرع.

بعض الأمثلة على ما TEXT هو جيد ل:

  • بلوق تعليقات
  • صفحات ويكي
  • مصدر الرمز

بعض الأمثلة على ما VARCHAR هو جيد ل:

  • أسماء المستخدمين
  • عناوين الصفحات
  • أسماء الملفات

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

استخدام خلاف ذلك VARCHAR.

ملاحظة الأمر نفسه ينطبق على UNICODE مكن NTEXT و NVARCHAR كذلك، والتي يجب أن تستخدمها للحصول على أمثلة أعلاه.

PPS. الأمر نفسه ينطبق على VARCHAR(MAX) و NVARCHAR(MAX) الذي - التي SQL Server 2005+ يستخدم بدلا من TEXT و NTEXT. وبعد ستحتاج إلى تمكين large value types out of row بالنسبة لهم مع sp_tableoption إذا كنت تريد منهم أن يتم تخزينهم دائما من الصف.

كما ذكر أعلاه و هنا, TEXT سيتم إهمالها في الإصدارات المستقبلية:

ال text in row سيتم إزالة الخيار في إصدار مستقبلي من خادم قاعدة البيانات. وبعد تجنب استخدام هذا الخيار في عمل تطوير جديد، وتخطيط لتعديل التطبيقات التي تستخدمها حاليا text in row. وبعد نوصي بتخزين البيانات الكبيرة باستخدام varchar(max), nvarchar(max), ، أو varbinary(max) أنواع البيانات. للسيطرة على السلوك في الصف والخروج من أنواع البيانات هذه، استخدم large value types out of row اختيار.

في SQL Server 2005 تم تقديم بيانات جديدة: varchar(max) و nvarchar(max)لديهم مزايا نوع النص القديم: يمكن أن تحتوي على المرجع إلى 2 جيجابايت من البيانات، ولكن لديهم أيضا معظم مزايا varchar و nvarchar. وبعد من بين هذه المزايا هي القدرة على استخدام وظائف معالجة السلسلة مثل Substring ().

أيضا، يتم تخزين varchar (MAX) في مساحة الجدول (القرص / الذاكرة) أثناء وجود حجم أقل من 8 كيلو بايت. فقط عند وضع المزيد من البيانات في هذا المجال، يتم تخزينه من مساحة الطاولة. يتم استرجاع البيانات المخزنة في مساحة الجدول (عادة) أسرع.

باختصار، لا تستخدم النص أبدا، حيث يوجد بديل أفضل: (ن) varchar (بحد أقصى). واستخدام Varchar فقط (بحد أقصى) عندما لا يكون varchar منتظم كبيرا بما يكفي، أي إذا كنت تتوقع أن تتجاوز سلسلة Teh التي ستتخزينها 8000 حرفا.

كما لوحظ، يمكنك استخدام Substring على Text DataType، ولكن فقط طالما أن الحقول النصية تحتوي على أقل من 8000 حرفا.

كانت هناك بعض التغييرات الرئيسية في MS 2008 -> قد تستحق النظر في المقالة التالية عند اتخاذ قرارات بشأن ما نوع البيانات المستخدمة.http://msdn.microsoft.com/en-us/library/ms143432.aspx.

بايت كل

  1. varchar (ماكس)، varbinary (max)، xml، text، أو عمود الصورة 2 ^ 31-1 2 ^ 31-1
  2. NVARCHAR (بحد أقصى) العمود 2 ^ 30-1 2 ^ 30-1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top