Jeg ved, at SQL 92 er gammel standard, men jeg er ret sikker på, at dette ikke er ændret i de nyere SQL-standardversioner.
SQL 92 definerer
Spørgsmålet er:0.1
og 0.2
i forespørgslen SELECT 0.1 + 0.2
en omtrentlig eller er den nøjagtig?
Svaret er:du ved det ikke, og databasen kan ikke vide det.
Så databasen vil køre den implementering, der er defineret for MySQL- og MariaDB-motorer, og denne ser ud til at blive håndteret som DECIMAL(1,1)
datatyper
Hvorfor returnerer Nicks svar de korrekte værdier eller forventede værdier med en tabeldefinition
SQL 92 definerer også
Hvilket Nick har gjort ved at definere datatypen i tabellen.
Redigerede dette svar, fordi jeg fandt noget i MySQL's manual i dag.
Forespørgslen
SELECT (0.1 + 0.2) = 0.3
Resultater i 1
i MySQL, hvilket betyder, at MySQL bruger nøjagtig numerisk beregning og bruger Præcisionsmatematik
hvor det er muligt. Så MySQL ved, at 0.1
, 0.2
og 0.3
er nøjagtige datatyper her og skal beregne nøjagtigt, som jeg havde forventet før denne redigering.
Betyder forespørgslen
SELECT (0.1 + 0.2) = 0.3
vil køre under motorhjelmen mere eller mindre som
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));