Je sais que SQL 92 est une ancienne norme, mais je suis presque sûr que cela n'a pas changé dans les nouvelles versions de la norme SQL.
SQL 92 définit
La question est :0.1
et 0.2
dans la requête SELECT 0.1 + 0.2
une approximation ou est-ce exact?
La réponse est :vous ne savez pas non plus que la base de données ne peut pas savoir.
Ainsi, la base de données exécutera l'implémentation définie pour les moteurs MySQL et MariaDB, cela semble être traité comme DECIMAL(1,1)
types de données
Pourquoi la réponse de Nick renvoie-t-elle les valeurs correctes ou attendues avec une définition de table
SQL 92 définit également
Ce que Nick a fait en définissant le type de données dans la table.
Modifié cette réponse car j'ai trouvé quelque chose dans le manuel de MySQL aujourd'hui.
La requête
SELECT (0.1 + 0.2) = 0.3
Résultats en 1
dans MySQL, ce qui signifie que MySQL utilise le calcul numérique exact et utilise Mathématiques de précision
si possible. Ainsi, MySQL sait que 0.1
, 0.2
et 0.3
sont des types de données exacts ici et doivent calculer exactement, comme je m'y attendais avant cette modification.
Signification de la requête
SELECT (0.1 + 0.2) = 0.3
passera sous le capot plus ou moins comme
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));