Phạm vi của kiểu dữ liệu DECIMAL nhiều hơn kiểu dữ liệu INTEGER và BIGINT. Như chúng ta biết BIGINT có thể lưu trữ 18446744073709551615 trong khi ở DECIMAL, bạn có thể lưu trữ DECIMAL (65,0) trong đó x đại diện cho 65 nines (9). DECIMAL lưu trữ số theo byte và công thức yêu cầu lưu trữ là:DECIMAL (x, 0) tức là
StorageRequirementInBytes =(x / 9) + còn lại; WHERE còn lại =round_up ((x% 9) / 2)
Bộ nhớ DECIMAL (65,0) như sau -
99999999999999999999999999999999999999999999999999999999999999999
Để hiểu những gì chúng ta đã thảo luận ở trên, hãy tạo một bảng. Truy vấn để tạo bảng như sau -
mysql> tạo bảng DecimalDemo-> (-> UserId DECIMAL (65,0) ->); Truy vấn OK, 0 hàng bị ảnh hưởng (0,62 giây)
Bây giờ bạn có thể chèn một số bản ghi trong bảng bằng cách sử dụng lệnh insert. Truy vấn như sau -
mysql> insert vào DecimalDemovalues (99999999999999999999999999999999999999999999999999999999999999999); Truy vấn OK, 1 hàng bị ảnh hưởng (0,16 giây) mysql> chèn vào DecimalDemovalues (99999999999999999999999999999999999999999999999Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng một câu lệnh chọn. Truy vấn như sau -
mysql> select * from DecimalDemo;Đầu ra
+ ---------------------------------------------- --------------------- + | UserId | + ----------------------------------------------- -------------------- + | 99999999999999999999999999999999999999999999999999999999999999999 || 999999999999999999999999999999999999999999999999999999999999999 | + ---------------------------------------------------------- -------------------- + 2 hàng trong bộ (0,00 giây)Nếu bạn cố gắng đưa ra 66 tại thời điểm tạo bảng, bạn sẽ gặp lỗi sau -
mysql> tạo bảng DecimalDemo1-> (-> UserId DECIMAL (66,0) ->); ERROR 1426 (42000):Độ chính xác quá lớn 66 được chỉ định cho 'UserId'. Tối đa là 65.