كتب Alex Kochis، كبير مديري المنتجات في "برنامج القيمة المضافة الأصلية لـ Windows" في إحدى المدونات، أن الخطأ البشري أدى إلى حدوث الخطأ. وقال Alex إنه تم تحميل البرنامج الجديد عن طريق الخطأ على الخادم الذي يقوم بتشغيل WGA، ونتيجة لذلك، لا يمكن للخادم تعمل بشكل طبيعي، ولا يمكن معالجة التطبيقات المعقولة من مستخدمي البرامج الأصلية بشكل صحيح. قاعدة البيانات التي يستخدمها العملاء هي MySQL، والمنتجات المطورة تدعم Oracle. لكي يتمكن العملاء من الدفع مقابلها، يجب علينا تغيير بيئة قاعدة البيانات من Oracle إلى MySQL. لقد واجهنا المشاكل التالية أثناء عملية التحويل، ونأمل أن نقدم بعض المراجع للزملاء الذين واجهوا نفس المشكلة. إذا انتبهنا إلى قابلية نقل قاعدة البيانات أثناء عملية التصميم والترميز الأولية، فلا داعي للقيام بأي عمل إضافي في هذه الحالة.
1. المشاكل التي تتم مواجهتها عند تغيير بيئة قاعدة البيانات من Oracle إلى MySQL.
نظرًا لأن المنطق لم يتغير، فإن المبدأ ليس تغيير رمز التطبيق، بل فقط إنشاء/تهيئة SQL لجدول قاعدة البيانات. فيما يلي المشاكل التي واجهناها وحلولها.
1. الاختلافات الحساسة لحالة الأحرف (إذا كان نظام تشغيل الخادم هو Linux).
Oracle بشكل عام ليست حساسة لحالة الأحرف. في بعض الأحيان، لا ننتبه إلى مشكلة الحالة عند استخدام Oracle. لا تكون أسماء الجداول وأسماء الحقول حساسة لحالة الأحرف بدون علامات الاقتباس المزدوجة: يكون للإدراج في tableName والإدراج في TABLENAME نفس التأثير. تهيئة البيانات، يتم تحويل النتائج التي تم الحصول عليها بشكل عام إلى أسماء الجداول الكبيرة وأسماء الحقول.
لكن في MySQL، تحدد حساسية حالة الأحرف لنظام التشغيل المستخدم حساسية حالة الأحرف لاسم قاعدة البيانات واسم الجدول. تتوافق قاعدة البيانات مع دليل في دليل البيانات، ويتوافق كل جدول في قاعدة البيانات مع ملف واحد على الأقل في دليل قاعدة البيانات (أو عدة ملفات، اعتمادًا على محرك التخزين). ولذلك، فإن استخدام قاعدة بيانات أو جدول هو في الواقع معالجة لهذه الملفات (المجلدات)، وبالتالي فإن حساسية حالة الأحرف لنظام التشغيل تحدد حساسية حالة الأحرف لاسم قاعدة البيانات واسم الجدول. وهو حساس لحالة الأحرف في أنظمة التشغيل التي يكون Linux هو النواة لها.
الحل هو الحفاظ على اسم قاعدة بيانات MySQL متوافقًا مع حالة Oracle، واسم الجدول متوافقًا مع اسم الجدول في سلسلة SQL في التطبيق. إذا كان اسم الحقل في التطبيق يستخدم علامات الاقتباس المزدوجة، فيرجى تغيير اسم الحقل في SQL يجب أن تكون حالة الاسم متسقة مع الأحرف المضمنة بين علامتي اقتباس مزدوجتين. إذا كانت أسماء الجداول والحقول التي يشير إليها تطبيقك لا تحتوي على حالة موحدة، فستكون في مشكلة كبيرة.
2. الفرق بين الكلمات المحجوزة.
أسماء الوظائف في لغة SQL (مثل inteval، show) هي كلمات محجوزة. يمكن استخدام الكلمات المحجوزة في Oracle كأسماء جداول وأسماء حقول، ولا تؤثر على استخدامها، ومع ذلك، لا يمكن استخدام الكلمات المحجوزة في MySQL كأسماء جداول وأسماء حقول، إذا تم استخدامها، فسيتم الإبلاغ عن خطأ في بناء الجملة.
الحل هو اقتباس الكلمات المحجوزة في عبارة SQL بالرمز "" الموجود أعلى مفتاح علامة التبويب بلوحة المفاتيح؛ إذا كان اسم حقل، فهناك طريقة أخرى لاسم الجدول. مثل هذا: أدخل في اسم الجدول (معرف، `الفاصل الزمني`) القيمة (..... أو أدخل في اسم الجدول (معرف، اسم الجدول.ينتفال) القيمة (..... .
3. الاختلافات في أنواع البيانات.
في MySQL، لا يوجد varchar2 والرقم كما هو الحال في Mysql يحتوي على varchar ورقم رقمي. بالطبع، لا يوجد نوع وقت MySQL في Oracle.
الحل هو الاستبدال
4. الفرق بين أنواع النمو التلقائي.
تحتوي Oracle على تسلسل، لكن MySQL لا تحتوي عليه، ولكنها تحتوي على سمة الزيادة التلقائية.
الحل هو تحويل التسلسل في Oracle لاستخدام سمة auto_increment. في بعض الحالات، قد تكون هناك طريقة لحل المشكلة. قم بإنشاء جدول مستقل جديد لتسجيل بيانات النمو التلقائي.
5. الاختلاف في حدود طول المؤشر.
بدءًا من MySQL 4.1.2، يدعم طول فهرس جداول MyISAM وInnoDB 1000 بايت، مما يعني أن طول حقل الفهرس لا يمكن أن يتجاوز 1000 بايت، وإذا تجاوز ذلك، فسيتم الإبلاغ عن الخطأ التالي: خطأ 1071 (42000): المفتاح المحدد طويل جدًا؛ الحد الأقصى لطول المفتاح هو 1000 بايت. إذا كان ترميز UTF-8، فهو يعادل طول 333 حرفًا (لأن حرف UTF8 الواحد يشغل 3 بايت). يعد الحد الأقصى لطول فهرس Oracle أكثر مرونة من MySQL.
ليست هناك حاجة لتوضيح الحل، إما تغيير تعريف الفهرس أو تغيير طول تعريف الحقل.
2. ما الذي يجب أن ننتبه إليه لتوافق قاعدة البيانات؟
يجب أن يكون توافق قاعدة البيانات مشكلة يجب الانتباه إليها في تصميم قاعدة البيانات، لأنه في بعض الأحيان يكون لدى العملاء قواعد بيانات قيد الاستخدام بالفعل ولا يريدون الاحتفاظ بقاعدتي بيانات في نفس الوقت، وفي هذه الحالة، يمكن أيضًا أن يصبح التوافق مع قواعد بيانات متعددة نقطة بيع للمنتج.
المفتاح لتحقيق توافق قاعدة البيانات هو الالتزام بالاستخدام القياسي.
1. اتبع الاستخدام القياسي وحاول عدم استخدام استخدام معين خاص بقاعدة البيانات.
مثل استخدام رمز msyql ''''،
على سبيل المثال، العديد من الأشخاص لديهم هذا الاستخدام. عند استخدام Oracle لإنشاء تسلسل، حدد seq.nextval FROM DUAL؛ قبل إدراج البيانات في الجدول، ثم قم بإدراج القيمة التي تم الحصول عليها من الاستعلام في الجدول كقيمة لا يعمل، فهو غير مناسب لقواعد البيانات التي لا تحتوي على تسلسل. كل قاعدة بيانات لها استخدام نمو تلقائي. إذا كنت بحاجة إلى استخدامها، فيجب عليك استخدامها بالكامل.
على سبيل المثال، تحتوي قواعد البيانات المختلفة على استعلامات ترحيل موسعة.
2. تجنب مشكلات حساسية حالة قاعدة البيانات.
اختر ما إذا كانت أسماء جداول قاعدة البيانات وأسماء الحقول يجب أن تكون بأحرف كبيرة أو صغيرة، وأن تكون موحدة تمامًا أثناء تصميم قاعدة البيانات وترميزها.
3. الكلمات المحجوزة.
يُطلب من مصممي قواعد البيانات محاولة عدم استخدام الكلمات المحجوزة لأسماء الجداول وأسماء الحقول. هناك أيضًا العديد من الأشخاص الذين يستخدمون هذه الطريقة، حيث يقومون بإضافة "_" قبل اسم الجدول واسم الحقل، مثل هذا: إنشاء جدول _tablename (_id عدد صحيح). بهذه الطريقة لن تواجه أبدًا أي مشاكل ناجمة عن الكلمات المحجوزة.