شبكة تعلم مع ناو

متى يؤدي تقريب DECIMAL إلى خطأ تجاوز المجال؟

قد تبدو قيمة عشرية مناسبة للعمود قبل التقريب، ثم تصبح غير قابلة للتخزين بعده. يظهر ذلك قرب الحد الأعلى لنوع DECIMAL. فالعمود DECIMAL(4,2) يستطيع تخزين قيم موجبة حتى 99.99، لأنه يخصص خانتين للجزء الصحيح وخانتين للجزء العشري. يجب أن تبقى النتيجة النهائية داخل هذا المجال.

إذا حاولت إدخال 99.995، فإن التقريب إلى خانتين عشريتين ينتج 100.00. تحتاج هذه النتيجة إلى ثلاث خانات صحيحة، ولذلك يرفضها MySQL عند تفعيل الوضع الصارم. سبب الرفض ليس مجرد وجود خانة عشرية إضافية؛ فقد تقبل قيم أخرى تحتوي على خانات إضافية بعد تقريبها. الحل في التصميم هو ترك مجال كافٍ للقيم المتوقعة، بما يشمل أثر التقريب عند الحدود، بدل النظر إلى الجزء الصحيح في المدخل فقط.

مثال

CREATE TABLE orders (
  amount DECIMAL(5,2)
);
INSERT INTO orders (amount) VALUES (99.995);

باختصار: يجب أن يستوعب العمود القيمة بعد التقريب؛ والتعريف الأوسع في المثال يستطيع تخزين 100.00.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.