MySQL tidak memberi Anda hasil palsu, itu hanya menggunakan implementasi modulus yang berbeda dari yang Anda harapkan. Sayangnya istilah modulus tampaknya telah didefinisikan agak ambigu, dan implementasinya bervariasi dari satu bahasa ke bahasa lainnya. Dari apa yang saya ketahui di Wikipedia di Modulo , implementasi MySQL menggunakan divisi terpotong :
r = a - n * trunc(a / n)
Di mana Anda mengharapkan implementasi menggunakan divisi berlantai :
r = a - n * floor(a / n)
Karena ini cara Anda menerapkan solusi pertama Anda, menurut saya ini mungkin alternatif terbaik untuk Mod
operator.
Dari apa yang saya lihat (dan ini adalah analisis tidak ilmiah yang sangat cepat!), sepertinya bahasa pemrograman yang lebih penting mengimplementasikan divisi terpotong dan bahasa matematika yang lebih fungsional tampaknya menggunakan pembagian berlantai .