sql >> Database teknologi >  >> RDS >> Mysql

Hvordan MySQL gør den matematiske beregning af floating point addition?

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


  1. MySql Connector EF6

  2. Oracle Database 21c

  3. Vælg samme kolonne for forskellige værdier i en anden kolonne

  4. på hinanden følgende dage i sql