Vím, že SQL 92 je starý standard, ale jsem si jistý, že se to v novějších standardních verzích SQL nezměnilo.
SQL 92 definuje
Otázka zní:0.1 a 0.2 v dotazu SELECT 0.1 + 0.2 přibližné nebo je to přesné?
Odpověď zní:nevíte, ani databáze nemůže vědět.
Databáze tedy poběží implementaci definovanou pro motory MySQL a MariaDB, která se zdá být zpracována jako DECIMAL(1,1) datové typy
Proč Nickova odpověď vrací správné hodnoty nebo očekávané hodnoty s definicí tabulky
SQL 92 také definuje
Což Nick udělal definováním datového typu v tabulce.
Upravil jsem tuto odpověď, protože jsem dnes něco našel v příručce MySQL.
Dotaz
SELECT (0.1 + 0.2) = 0.3
Výsledky do 1 v MySQL, což znamená, že MySQL používá přesné numerické výpočty a používá Přesná matematika
kde je to možné. Takže MySQL ví, že 0.1 , 0.2 a 0.3 jsou zde přesné datové typy a je třeba je přesně vypočítat, jak jsem před touto úpravou očekával.
Význam dotazu
SELECT (0.1 + 0.2) = 0.3
poběží pod kapotou víceméně jako
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));