Der folgende Abschnitt ist vor allem für
        DOUBLE- und FLOAT-Spalten
        interessant, da Fließkommazahlen von Natur aus ungenau sind.
        MySQL führt DECIMAL-Operationen mit einer
        Genauigkeit von 64 Dezimalstellen aus. Das müsste die meisten
        Probleme im Hinblick auf die Genauigkeit von
        DECIMAL-Spalten lösen.
      
        Fließkommazahlen stiften gelegentlich Verwirrung, da sie in
        einer Computerarchitektur nicht als exakte Werte gespeichert
        werden. Das, was der Bildschirm zeigt, ist in der Regel nicht
        der genaue Wert der Zahl. Die Datentypen
        FLOAT und DOUBLE sind
        Fließkommatypen. DECIMAL-Spalten speichern
        Werte mit einer exakten Anzahl Stellen, weil sie als Strings
        dargestellt werden.
      
        Das folgende Beispiel verdeutlicht das Problem an einem
        DOUBLE:
      
mysql>CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);mysql>INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),->(2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),->(2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),->(4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),->(5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),->(6, 0.00, 0.00), (6, -51.40, 0.00);mysql>SELECT i, SUM(d1) AS a, SUM(d2) AS b->FROM t1 GROUP BY i HAVING a <> b;+------+-------+------+ | i | a | b | +------+-------+------+ | 1 | 21.4 | 21.4 | | 2 | 76.8 | 76.8 | | 3 | 7.4 | 7.4 | | 4 | 15.4 | 15.4 | | 5 | 7.2 | 7.2 | | 6 | -51.4 | 0 | +------+-------+------+
        Das Ergebnis ist richtig. Auch wenn die ersten fünf Datensätze
        nicht so aussehen, als würden sie den Test bestehen (die Werte
        von a und b sehen nicht
        verschieden aus), können sie dennoch unterschiedlich sein, da
        sie womöglich in der zehnten Nachkommastelle oder so (je nach
        Computerarchitektur) eine Abweichung aufweisen.
      
        Wären die Spalten d1 und
        d2 als DECIMAL statt als
        DOUBLE definiert, so hätte die
        SELECT-Anfrage nur eine einzige Zeile
        geliefert, nämlich die letzte der obigen Tabelle.
      
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

