2009-11-25 29 views
53

Trong MySQL, loại cột ưa thích để lưu trữ giá của sản phẩm (hoặc tiền tệ nói chung) là gì? Google đã học tôi DECIMAL của FLOAT thường được sử dụng, nhưng tôi tự hỏi cái nào tốt hơn.MySQL: loại cột ưa thích cho giá (sản phẩm)?

Tôi đang lưu trữ giá dao động từ 0,01 đến 25,00. Tất nhiên giá trị cao hơn cũng có thể được. (Lưu ý: Tôi không yêu cầu mã bản sao-pasta, tôi chỉ cung cấp cho bạn thêm thông tin có thể giúp bạn tạo thành một câu trả lời hoàn chỉnh hơn).

Cảm ơn

Trả lời

59

Decimal là một trong tôi sẽ sử dụng

Sự khác biệt cơ bản giữa Decimal/Numeric và Float: Float là xấp xỉ-số kiểu dữ liệu, mà có nghĩa là không phải tất cả các giá trị trong dữ liệu phạm vi loại có thể được biểu diễn chính xác. Thập phân/số là định nghĩa chính xác loại dữ liệu, có nghĩa là tất cả các giá trị trong kiểu dữ liệu reane có thể là đại diện chính xác với độ chính xác và quy mô .

Chuyển đổi từ thập phân hoặc số thành float có thể gây ra một số tổn thất về độ chính xác . Đối với kiểu số thập phân hoặc số , SQL Server xem xét từng kết hợp chính xác cụ thể và quy mô làm loại dữ liệu khác nhau. DECIMAL (4,2) và DECIMAL (6,4) là các loại dữ liệu khác nhau. Điều này có nghĩa rằng 11,22 và 11,2222 là các loại khác nhau mặc dù đây không phải là trường hợp nổi. Đối với FLOAT (6) 11.22 và 11.2222 là cùng loại dữ liệu.

+0

Cảm ơn jdt199 và Razzie, sẽ chấp nhận cả hai câu trả lời của bạn nhưng đã chọn câu trả lời của bạn là câu trả lời hoàn chỉnh nhất. – SolidSmile

+1

@Sheff DECIMAL (2,2) phải là DECIMAL (4,2). DECIMAL (2,4) phải là DECIMAL (6,4). Xem https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html – cgaldiolo

13

Tôi sẽ không sử dụng phao vì có thể cung cấp lỗi làm tròn, vì đó là loại dấu phẩy động.

Sử dụng số thập phân:

"Số thập phân và các loại NUMERIC được sử dụng các giá trị lưu trữ mà nó là quan trọng để bảo vệ chính xác chính xác, ví dụ với tiền tệ dữ liệu"

see: http://dev.mysql.com/doc/mysql/en/numeric-types.html

+0

Ngoài ra, hãy xem: https://dev.mysql.com/doc/refman/5.7/ vi/fixed-point-types.html – Amr

23

loại Field "Decimal" là tốt.

Nếu bạn có giá cao thì bạn có thể sử dụng product_price decimal(6,2) NOT NULL, tức là bạn có thể lưu trữ giá tối đa 6 chữ số có dấu thập phân trước 2 chữ số.

Giá trị tối đa cho lĩnh vực product_price decimal(6,2) NOT NULL, sẽ lưu trữ giá lên đến 9.999,99

Nếu tất cả giá cả giữa 0,01-25,00 sau đó product_price decimal(4,2) NOT NULL, sẽ được tốt, nhưng nếu bạn sẽ có giá cao hơn thì bạn có thể đặt bất kỳ giá trị trong decimal(4,2).

6

Tôi thích INT (giá nhân với 100) giải quyết vấn đề dấu chấm động trong phần mềm khác.

+2

Tôi thừa kế hệ thống như vậy, thật vui khi thấy anh chàng này nhân giá tất cả trước khi thực hiện tìm kiếm trong DB dựa trên giá và ngược lại. Sau đó tôi đã có đủ đau bắt lỗi do điều này trước khi chuyển đến số thập phân – Tebe

+0

@ ГляОпаОпа làm thế nào để bạn giải quyết vấn đề dấu chấm động bằng cách sử dụng thập phân? – Peter

+0

trước khi lưu trữ I vòng mọi số đến dấu thứ ba sau điểm và sử dụng DECIMAL (N, 3) để lưu trữ – Tebe

Các vấn đề liên quan