it-swarm.asia

ما الفرق بين أنواع بيانات Oracle VARCHAR و VARCHAR2؟

عند ترحيل الجداول القادمة من DBMSs الأخرى إلى Oracle ، فإن إحدى المهام القياسية هي استبدال جميع الحقول VARCHAR(n) بالحقول VARCHAR2(n) الحقول (المقدمة n <= 4000) .

لماذا تسمى Oracle نوع البيانات هذا VARCHAR2 وليس فقط VARCHAR مثل DBMSs الأخرى؟

19
bernd_k

يبدو أن أوراكل كانت لديها في وقت ما خطط لإعطاء تعريف مختلف لـ [~ # ~] varchar [~ # ~] من VARCHAR2 . أخبرت العملاء بذلك وتوصي بعدم استخدام [~ # ~] varchar [~ # ~] . مهما كانت خططهم ، اعتبارًا من 11.2.0.2 [~ # ~] varchar [~ # ~] مطابق لـ VARCHAR2 . إليك ما يقوله مرجع لغة SQL 11g الإصدار 2 يقول:

لا تستخدم نوع بيانات VARCHAR. استخدم نوع البيانات VARCHAR2 بدلاً من ذلك. على الرغم من أن نوع بيانات VARCHAR هو مرادف حاليًا لـ VARCHAR2 ، فمن المقرر إعادة تعريف نوع بيانات VARCHAR كنوع بيانات منفصل يستخدم لسلاسل الأحرف ذات الطول المتغير مقارنة بدلالات المقارنة المختلفة.

دليل مستخدم PL/SQL والمرجع 10 جرام الإصدار 2 يضعها على هذا النحو:

حاليا ، VARCHAR مرادف لـ VARCHAR2. ومع ذلك ، في الإصدارات المستقبلية من PL/SQL ، لاستيعاب معايير SQL الناشئة ، قد يصبح VARCHAR نوع بيانات منفصل مع دلالات مقارنة مختلفة. من الجيد استخدام VARCHAR2 بدلاً من VARCHAR.

قاعدة بيانات المفاهيم 10g الإصدار 2 تقول الوثيقة نفس الشيء بعبارات أقوى:

نوع بيانات VARCHAR مرادف لنوع بيانات VARCHAR2. لتجنب التغييرات المحتملة في السلوك ، استخدم دائمًا نوع البيانات VARCHAR2 لتخزين سلاسل الأحرف ذات الطول المتغير.

توضح وثائق Oracle 9.2 و 8.1.7 بشكل أساسي نفس الشيء ، لذلك على الرغم من أن Oracle لا تشجع باستمرار استخدام [~ # ~] varchar [~ # ~] ، حتى الآن لم يفعلوا أي شيء لتغيير تماثله مع VARCHAR2 .

26
Leigh Riffel

حاليا ، هما مترادفان.

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

25
Justin Cave

لأنه في معيار SQL الأصلي ، كان VARCHAR 255 حرفًا ، وكان لدى Oracle على الأقل طعنة في الامتثال للمعايير في تلك الأيام.

3
Gaius