Jag vet att SQL 92 är gammal standard men jag är ganska säker på att detta inte har ändrats i de nyare SQL-standardversionerna.
SQL 92 definierar
Frågan är:0.1
och 0.2
i frågan SELECT 0.1 + 0.2
ungefärligt eller är det exakt?
Svaret är:du vet inte och databasen kan inte veta.
Så databasen kommer att köra implementeringen som definierats för MySQL- och MariaDB-motorer, denna sömmar ska hanteras som DECIMAL(1,1)
datatyper
Varför returnerar Nicks svar de korrekta värdena eller förväntade med en tabelldefinition
SQL 92 definierar också
Vilket Nick har gjort genom att definiera datatypen i tabellen.
Redigerade det här svaret eftersom jag hittade något i MySQL:s manual idag.
Frågan
SELECT (0.1 + 0.2) = 0.3
Resultat i 1
i MySQL vilket innebär att MySQL använder exakt numerisk beräkning och använder Precision Math
där det är möjligt. Så MySQL vet att 0.1
, 0.2
och 0.3
är exakta datatyper här och måste beräknas exakt, som jag förväntade mig innan denna redigering.
Menar frågan
SELECT (0.1 + 0.2) = 0.3
kommer att köra under huven ungefär som
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));