2013-02-18 8 views
5

Trong cơ sở dữ liệu MySQL của tôi, tôi có trường DECIMAL (23,5), vì vậy 5 chữ số sau dấu thập phân. Bây giờ, khi tôi sẽ truy vấn như thế này:Mysql thập phân: sàn thay vì vòng

UPDATE my_table SET my_decimal_field = 123.123456789 WHERE id = 1 

Và sau đó tôi sẽ lấy đó kỷ lục:

SELECT id, my_decimal_field FROM gijhars WHERE id = 1 

tôi nhận được kết quả này:

+------+------------------+ 
| id | my_decimal_field | 
+------+------------------+ 
| 5733 | 123.12346  | 
+------+------------------+ 

Vì vậy, tất nhiên, MySQL là làm tròn các giá trị này, nếu chúng có nhiều hơn 6 chữ số sau dấu thập phân. Có bất kỳ cài đặt nào trong MySQL, để sàn các giá trị này thay vì làm tròn không?

+2

http://dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html _When một cột đó được gán một giá trị với nhiều chữ số sau dấu thập phân hơn là permi tted theo quy mô quy định, giá trị được chuyển đổi sang quy mô đó. (Hành vi chính xác là hệ điều hành cụ thể, nhưng nhìn chung hiệu ứng là cắt ngắn đến số chữ số cho phép.) _ –

+1

Không thể sử dụng http://dev.mysql.com/doc/refman/5.0/en/mathematical- functions.html # function_floor? –

+0

Có, tôi có thể, chỉ tò mò nếu nó có thể được thực hiện bởi cấu hình, bởi vì tôi cần hành vi này trong toàn bộ ứng dụng. –

Trả lời

6

Từ doc

Khi một cột đó được gán một giá trị với nhiều chữ số sau dấu thập phân hơn được cho phép bởi quy mô nhất định, giá trị được chuyển đổi sang quy mô đó. (Các hành vi chính xác được hệ điều hành cụ thể, nhưng nhìn chung có hiệu lực là cắt ngắn với số phép của chữ số.)

Nếu đó không phải là trường hợp cho hệ điều hành của bạn, sau đó bạn có thể xử lý này khi cập nhật với truncate

UPDATE my_table 
SET my_decimal_field = truncate(123.123456789, 5) 
WHERE id = 1 

SQLFiddle demo