MySQL आपको एक फर्जी परिणाम नहीं दे रहा है, यह केवल आपकी अपेक्षा से मॉड्यूलस के एक अलग कार्यान्वयन का उपयोग कर रहा है। दुर्भाग्य से मॉड्यूलस शब्द को कुछ अस्पष्ट रूप से परिभाषित किया गया है, और इसका कार्यान्वयन भाषा से भाषा में भिन्न होता है। जो मैं विकिपीडिया ऑन मोडुलो में बता सकता हूं , MySQL का कार्यान्वयन काटे गए विभाजन का उपयोग कर रहा है :
r = a - n * trunc(a / n)
जहां आप कार्यान्वयन की अपेक्षा कर रहे हैं फर्श डिवीजन . का उपयोग करें :
r = a - n * floor(a / n)
चूंकि आपने अपना पहला वर्कअराउंड कैसे लागू किया, इसलिए मैं कहूंगा कि यह शायद Mod
का सबसे अच्छा विकल्प है ऑपरेटर।
मैंने जो देखा है (और यह एक बहुत तेज़ अवैज्ञानिक विश्लेषण है!), ऐसा लगता है कि अधिक अनिवार्य प्रोग्रामिंग भाषाएं छोटा विभाजन लागू करती हैं और अधिक कार्यात्मक गणितीय भाषाएं फर्श विभाजन का उपयोग करती प्रतीत होती हैं ।