MySQL gibt Ihnen kein falsches Ergebnis, es verwendet einfach eine andere Implementierung von modulus als Sie erwarten. Leider scheint der Begriff Modul etwas zweideutig definiert worden zu sein, und seine Implementierung variiert von Sprache zu Sprache. Von dem, was ich im Wikipedia on Modulo sagen kann verwendet die MySQL-Implementierung eine abgeschnittene Division :
r = a - n * trunc(a / n)
Wo Sie erwarten, dass die Implementierung Floored Division verwendet :
r = a - n * floor(a / n)
Da Sie so Ihren ersten Workaround implementiert haben, würde ich sagen, dass es wahrscheinlich die beste Alternative zum Mod
ist Betreiber.
Nach dem, was ich gesehen habe (und dies ist eine sehr schnelle, unwissenschaftliche Analyse!), scheint es, als ob zwingendere Programmiersprachen die abgeschnittene Division implementieren und funktionalere mathematische Sprachen scheinen Floored Division zu verwenden .