Tôi hoàn toàn không thể nắm bắt được KHAI THÁC của MySQL. Tôi cần hàng để có thể chứa một số ở bất cứ đâu từ 00.0001 đến 99.9999. Làm thế nào tôi có thể cấu trúc nó để làm việc như vậy?
Tôi hoàn toàn không thể nắm bắt được KHAI THÁC của MySQL. Tôi cần hàng để có thể chứa một số ở bất cứ đâu từ 00.0001 đến 99.9999. Làm thế nào tôi có thể cấu trúc nó để làm việc như vậy?
Câu trả lời:
Các cột NHÂN ĐÔI không giống như các cột DECIMAL và bạn sẽ gặp rắc rối nếu bạn sử dụng các cột NHÂN ĐÔI cho dữ liệu tài chính.
NHÂN ĐÔI thực sự chỉ là một phiên bản FLOAT chính xác kép (64 bit thay vì 32 bit) . Số dấu phẩy động là biểu diễn gần đúng của số thực và chúng không chính xác. Trên thực tế, các số đơn giản như 0,01 không có biểu diễn chính xác trong các loại FLOAT hoặc NHÂN ĐÔI.
Các cột DECIMAL là các biểu diễn chính xác, nhưng chúng chiếm nhiều không gian hơn cho một phạm vi số nhỏ hơn có thể có. Để tạo một cột có khả năng giữ các giá trị từ 0,0001 đến 99,9999 như bạn đã hỏi, bạn sẽ cần câu lệnh sau
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
Định nghĩa cột tuân theo định dạng DECIMAL (M, D) trong đó M là số chữ số tối đa ( độ chính xác ) và D là số chữ số ở bên phải dấu thập phân ( thang đo ).
Điều này có nghĩa là lệnh trước đó tạo một cột chấp nhận các giá trị từ -99.9999 đến 99.9999. Bạn cũng có thể tạo một cột KHAI THÁC KHÔNG ĐƯỢC KÝ, từ 0,0000 đến 99,9999.
Để biết thêm thông tin về MySQL DECIMAL các tài liệu chính thức luôn là một tài nguyên tuyệt vời.
Hãy nhớ rằng tất cả các thông tin này là đúng cho các phiên bản MySQL 5.0.3 trở lên. Nếu bạn đang sử dụng các phiên bản trước, bạn thực sự nên nâng cấp.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Nó sẽ trả về một lỗi ngoài phạm vi cho các giá trị âm. Bạn cũng có thể tạo FLOAT và NHÂN ĐÔI không dấu. Hướng dẫn sử dụng: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Mặc dù các câu trả lời ở trên có vẻ đúng, chỉ là một lời giải thích đơn giản để cung cấp cho bạn ý tưởng về cách thức hoạt động của nó.
Giả sử rằng cột của bạn được đặt thành DECIMAL(13,4)
. Điều này có nghĩa là cột sẽ có tổng kích thước 13 chữ số trong đó 4 chữ số này sẽ được sử dụng để biểu diễn chính xác.
Vì vậy, tóm lại, đối với cột đó, bạn sẽ có giá trị tối đa là: 999999999.9999
Có những giải pháp chính xác trong các ý kiến, nhưng để tóm tắt chúng thành một câu trả lời duy nhất:
Bạn phải sử dụng DECIMAL (6,4).
Sau đó, bạn có thể có 6 tổng số chữ số, 2 trước và 4 sau dấu thập phân (thang đo). Ít nhất là theo điều này .
Đặc tả MySQL 5.x cho kiểu dữ liệu thập phân là:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Câu trả lời ở trên là sai khi nói rằng số thập phân không dấu là không thể.
Để xác định trường chỉ cho phép số thập phân không dấu, với tổng độ dài 6 chữ số, 4 trong số đó là số thập phân, bạn sẽ sử dụng : DECIMAL (6,4) UNSIGNED
.
Bạn cũng có thể tạo các kiểu dữ liệu FLOAT và DOUBLE không dấu (không âm).