sql >> Databasteknik >  >> RDS >> Mysql

Hur MySQL gör den matematiska beräkningen av flyttal?

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));


  1. order by rand() får problem för stora inlägg

  2. Varför lägger Rails till `OR 1=0` till frågor med hjälp av where-satsens hash-syntax med ett intervall?

  3. Entity Data Model Wizard får undantag när man försöker lägga till en ny Oracle-anslutning

  4. MySQL/PHP foreach visas fortfarande bara först i databasen