sql >> Databasteknik >  >> RDS >> Mysql

MySQL MOD() är trasig:Är detta det bästa alternativet?

MySQL ger dig inte ett falskt resultat, det använder helt enkelt en annan implementering av modul än du förväntar dig. Tyvärr verkar termen modul ha definierats något tvetydigt, och dess implementering varierar från språk till språk. Vad jag kan säga i Wikipedia på Modulo , MySQL:s implementering använder trunkerad division :

r = a - n * trunc(a / n)

Där du förväntar dig att implementeringen ska använda golvuppdelning :

r = a - n * floor(a / n)

Eftersom det här hur du implementerade din första lösning, skulle jag säga att det förmodligen är det bästa alternativet till Mod operatör.

Av vad jag har sett (och det här är en mycket snabb ovetenskaplig analys!), verkar det som om mer imperativa programmeringsspråk implementerar trunkerad division och mer funktionella matematiska språk verkar använda golvdivision .




  1. MySql-bulkinsert

  2. Varför är en mysqldump med enkeltransaktion mer konsekvent än en utan?

  3. Infogar preparerat statement till databasen - PSQL

  4. Hur får jag ett slumpmässigt standardvärde för en kolumn i MySQL/Rails