محتويات الدورة

MariaDB / المتقدم: الأدلة والتشغيل الموثوق / الدرس 16

JSON وحدود التوافق في MariaDB

احفظ بيانات طرد مرنة مع التكامل العلاقي وإمكان البحث، وافهم اختلاف JSON في MariaDB عن JSON الثنائية في MySQL.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • شرح تمثيل JSON النصي والتحقق منه.
  • استخراج قيم مفردة وفهرستها بوعي مع فحص الإصدار.

JSON اسم بديل لنص في MariaDB

JSON في MariaDB اسم بديل لـ LONGTEXT بترتيب utf8mb4_bin وليست تخزين MySQL الثنائي. تضيف الإصدارات الحديثة المدعومة تحقق الصلاحية للاسم البديل؛ افحص SHOW CREATE TABLE لإصدارك، واستخدم CHECK صريحاً مع عمود نص عادي. صحة JSON تثبت البنية فقط لا وجود وزن مطلوب أو إيجابيته. أبقِ الهوية والمفاتيح والمبالغ علاقية عندما تحتاج القيود والربط المعتادين.

استخرج قيمة مفردة محولة بوضوح

تحتوي الوثيقة شركة نقل نصية ووزناً عددياً. تعيد JSON_EXTRACT قيماً بصيغة JSON وتستخرج JSON_UNQUOTE النص من سلسلة JSON. يجعل التحويل المقارنة العددية صريحة، والنتيجتان المستنتجتان Harbor و2.50. قد يعطي المسار الغائب SQL NULL، ولـ JSON null تمثيلها؛ افحص سلوك الدوال ولا تساوِ الغائب وnull والنص الفارغ والصفر.

sql SQL توضيحي؛ النتائج المتوقعة مستنتجة وليست قياسات.
SELECT
 JSON_UNQUOTE(JSON_EXTRACT('{"carrier":"Harbor","kg":2.5}', '$.carrier')) AS carrier,
 CAST(JSON_UNQUOTE(JSON_EXTRACT('{"carrier":"Harbor","kg":2.5}', '$.kg'))
 AS DECIMAL(6,2)) AS kg;
الناتج المتوقع
carrier | kg
Harbor  | 2.50

النتيجة محسوبة من وثيقة حرفية ولا تعتمد على سجلات خادم.

رقِّ الحقول كثيرة البحث

إذا كانت شركة النقل بعداً مستقراً فقد يكون العمود العادي أوضح من تحليل الوثائق المتكرر. ويمكن لعمود مولد تعريف الاستخراج وفهرسة القيمة. اجعل التحقق والطول مناسبين للقيمة المسقطة. تختلف خيارات VIRTUAL وPERSISTENT وقيود الفهرسة حسب الإصدار والمحرك. استعلم العمود المولد صراحة كأساس واسع التوافق؛ قد تتعرف المحسنات الأحدث على تكافؤ تعبيرات إضافية.

افهرس الإسقاط التجاري المعلن

يحفظ الجدول الوثيقة ويعرض شركة النقل قيمة مولدة محدودة. يفترض إصدار MariaDB حديثاً مدعوماً وInnoDB؛ افحص التعريف واختبر الوثائق غير الصحيحة والغياب والطول الزائد تحت وضع SQL المطلوب. لا نزعم اختيار الفهرس لعينة صغيرة. يسمي الاستعلام carrier مباشرة لتوضيح عقد التقرير والفهرس المرشح عند مراجعة الخطة.

sql SQL توضيحي؛ النتائج المتوقعة مستنتجة وليست قياسات.
CREATE TABLE parcel_meta (
 parcel_id INT PRIMARY KEY, payload JSON NOT NULL,
 carrier VARCHAR(40) AS
 (JSON_UNQUOTE(JSON_EXTRACT(payload, '$.carrier'))) PERSISTENT,
 INDEX ix_meta_carrier (carrier)
) ENGINE=InnoDB;
EXPLAIN SELECT parcel_id FROM parcel_meta WHERE carrier = 'Harbor';

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

يحتاج التوافق اختبارات على البيانات

لا تتبادل ملفات JSON الثنائية في MySQL مع النصية في MariaDB. تحتاج مزامنة النوع الأصلي بين المنتجين استراتيجية تحويل موثقة، ولا تفترض ترجمة شفافة بالمزامنة الصفية. المفاتيح المكررة فخ آخر؛ قد يكشف الاستخراج أول مفتاح مطابق، لذا ارفض الوثائق الملتبسة عند الدخول. قارن الترتيب والتحويل والهروب وnull بعينات ممثلة. تتوفر JSON_TABLE منذ 10.6، ولا يعني ذلك تطابق كل معامل JSON في MySQL.

الأخطاء الشائعة وإصلاحها

يُعامل نص JSON كأنه JSON ثنائية في MySQL

لماذا يحدث؟
أخفى اسم النوع المشترك اختلاف التمثيل الفيزيائي.
كيف تصلحه؟
استخدم تحويلاً منطقياً موثقاً وتحقق من القيم في الوجهة.
كيف تتجنب تكراره؟
ضمّن تمثيل JSON في مراجعات التوافق والمزامنة.

يُفرز عدد JSON كنص

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

تنجح صلاحية الوثيقة وتغيب حقول لازمة

لماذا يحدث؟
تفحص JSON_VALID الصياغة لا مخطط التطبيق.
كيف تصلحه؟
أضف تحقق الحقول والقيود العلاقية المناسبة.
كيف تتجنب تكراره؟
اختبر الغياب وnull والنوع الخاطئ والمفاتيح المكررة.

اختبر فهمك

1. استُخرجت "9" و"100" كسلسلتين. لماذا يختلف الفرز النصي عن الوزن؟

اعرض الحل المشروح

يقارن النص تسلسل المحارف، فقد يسبق 1 الرقم 9 مع أن 100 أكبر عددياً. تحقق من المحتوى وحوله إلى DECIMAL مناسبة. والأفضل حفظ الوزن الأساسي في عمود عددي مقيد، واستخدام JSON للبيانات الاختيارية دون إضعاف النموذج.

2. يستخدم مصدر MySQL نوع JSON الأصلي ويقترح الفريق نسخ ملفاته إلى MariaDB. ماذا تتطلب المراجعة؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • JSON في MariaDB نص متحقق وله متطلبات مخطط تجاري مستقلة.
  • رقِّ القيم المهمة للبحث واختبر دلالات المنتجين صراحة.

المراجع الرسمية