Wiem, że SQL 92 jest starym standardem, ale jestem prawie pewien, że nie uległo to zmianie w nowszych wersjach standardu SQL.
SQL 92 definiuje
Pytanie brzmi:0.1
i 0.2
w zapytaniu SELECT 0.1 + 0.2
przybliżony czy dokładny?
Odpowiedź brzmi:nie wiesz również baza danych nie może wiedzieć.
Więc baza danych uruchomi implementację zdefiniowaną dla silników MySQL i MariaDB, co wydaje się być obsługiwane jako DECIMAL(1,1)
typy danych
Dlaczego odpowiedź Nicka zwraca prawidłowe lub oczekiwane wartości z definicją tabeli
SQL 92 definiuje również
Co Nick zrobił, definiując typ danych w tabeli.
Zmieniłem tę odpowiedź, ponieważ znalazłem dzisiaj coś w podręczniku MySQL.
Zapytanie
SELECT (0.1 + 0.2) = 0.3
Wyniki w 1
w MySQL, co oznacza, że MySQL używa dokładnych obliczeń numerycznych i używa Matematyka precyzyjna
gdzie to możliwe. Tak więc MySQL wie, że 0.1
, 0.2
i 0.3
są tutaj dokładne typy danych i trzeba je dokładnie obliczyć, tak jak się spodziewałem przed tą edycją.
Znaczenie zapytania
SELECT (0.1 + 0.2) = 0.3
będzie biegać pod maską mniej więcej jak
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));