Tôi biết SQL 92 là tiêu chuẩn cũ nhưng tôi khá chắc chắn rằng điều này không được thay đổi trong các phiên bản tiêu chuẩn SQL mới hơn.
SQL 92 định nghĩa
Câu hỏi là:0.1
và 0.2
trong truy vấn SELECT 0.1 + 0.2
gần đúng hay chính xác? Câu trả lời là:bạn không biết thì cơ sở dữ liệu cũng không thể biết.
Vì vậy, cơ sở dữ liệu sẽ chạy triển khai được xác định cho các động cơ MySQL và MariaDB, các đường nối này sẽ được xử lý dưới dạng DECIMAL(1,1)
kiểu dữ liệu
Tại sao câu trả lời của Nick trả về các giá trị chính xác hoặc các giá trị mong đợi với định nghĩa bảng
SQL 92 cũng định nghĩa
Nick đã thực hiện bằng cách xác định kiểu dữ liệu trong bảng.
Đã chỉnh sửa câu trả lời này vì tôi đã tìm thấy thứ gì đó trong hướng dẫn sử dụng MySQL hôm nay.
Truy vấn
SELECT (0.1 + 0.2) = 0.3
Kết quả thành 1
trong MySQL, có nghĩa là MySQL sử dụng tính toán số chính xác và sử dụng Toán chính xác
Nếu có thể. Vì vậy, MySQL không biết rằng 0.1
, 0.2
và 0.3
là các kiểu dữ liệu chính xác ở đây và cần phải tính toán chính xác, giống như tôi đã mong đợi trước lần chỉnh sửa này.
Có nghĩa là truy vấn
SELECT (0.1 + 0.2) = 0.3
sẽ chạy dưới mui xe ít nhiều giống như
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));