Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Phạm vi của DECIMAL(x,0) trong MySQL

Tóm tắt

Kiểu DECIMAL(p,0) lưu số nguyên lớn hơn BIGINT. Độ chính xác tối đa p = 65 chữ số (65 chữ số 9).

Công thức lưu trữ

Số byte = (p DIV 9) + CEIL((p MOD 9) / 2)
-- Mỗi 9 chữ số dùng 4 byte, phần dư dùng 1-4 byte.

Ví dụ: DECIMAL(65,0)

CREATE TABLE DecimalDemo (UserId DECIMAL(65,0));
INSERT INTO DecimalDemo VALUES (99999999999999999999999999999999999999999999999999999999999999999);
-- 65 chữ số 9

Kết quả

+-------------------------------------------------------------------+
| UserId                                                            |
+-------------------------------------------------------------------+
| 99999999999999999999999999999999999999999999999999999999999999999 |
+-------------------------------------------------------------------+

Giới hạn

CREATE TABLE DecimalDemo1 (UserId DECIMAL(66,0));
-- ERROR 1426 (42000): Too-big precision 66 specified. Maximum is 65.

So sánh

KiểuMax giá trị (unsigned)Byte
TINYINT2551
SMALLINT65,5352
MEDIUMINT16,777,2153
INT4,294,967,2954
BIGINT18,446,744,073,709,551,615 (~1.8e19)8
DECIMAL(65,0)10^65 - 1 (65 chữ số 9)29

Khi nào dùng DECIMAL(x,0)?

  • Số nguyên cực lớn (ID phân tán, hash, khoa học, tài chính số lượng lớn).
  • Cần độ chính xác tuyệt đối (không sai số float).
  • Chấp nhận hiệu năng chậm hơn so với BIGINT.