Sự khác biệt giữa tinyint, smallint, Mediumint, bigint và int trong MySQL là gì?
Trong những trường hợp này nên được sử dụng?
Sự khác biệt giữa tinyint, smallint, Mediumint, bigint và int trong MySQL là gì?
Trong những trường hợp này nên được sử dụng?
Câu trả lời:
Chúng chiếm một lượng không gian khác nhau và chúng có phạm vi giá trị chấp nhận khác nhau.
Dưới đây là kích thước và phạm vi giá trị cho SQL Server , các RDBMS khác có tài liệu tương tự:
Hóa ra tất cả họ đều sử dụng cùng một đặc điểm kỹ thuật (với một vài ngoại lệ nhỏ được ghi chú bên dưới) nhưng hỗ trợ các kết hợp khác nhau của các loại đó (không bao gồm Oracle vì nó chỉ là một NUMBER
kiểu dữ liệu, xem liên kết ở trên):
| SQL Server MySQL Postgres DB2
---------------------------------------------------
tinyint | X X
smallint | X X X X
mediumint | X
int/integer | X X X X
bigint | X X X X
Và chúng hỗ trợ cùng một phạm vi giá trị (với một ngoại lệ bên dưới) và tất cả đều có cùng yêu cầu lưu trữ:
| Bytes Range (signed) Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint | 1 byte -128 to 127 0 to 255
smallint | 2 bytes -32768 to 32767 0 to 65535
mediumint | 3 bytes -8388608 to 8388607 0 to 16777215
int/integer | 4 bytes -2147483648 to 2147483647 0 to 4294967295
bigint | 8 bytes -9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
Các loại "không dấu" chỉ có sẵn trong MySQL và phần còn lại chỉ sử dụng các phạm vi đã ký, với một ngoại lệ đáng chú ý: tinyint
trong SQL Server không dấu và có phạm vi giá trị từ 0 đến 255
kích thước lưu trữ cần thiết và số lượng có thể lớn như thế nào
trên máy chủ SQL
tí hon 1 byte, 0 đến 255
nhỏ 2 byte, -2 ^ 15 (-32,768) đến 2 ^ 15-1 (32,767)
int 4 byte, -2 ^ 31 (-2,147,483,648) đến 2 ^ 31-1 (2,147,483,647)
ông lớn 8 byte, -2 ^ 63 (-9,223,372,036,854,775,809) đến 2 ^ 63-1 (9,223,372,036,854,775,807)
bạn có thể lưu trữ số 1 trong cả 4, nhưng một bigint sẽ sử dụng 8 byte trong khi một tinyint sẽ sử dụng 1 byte
Khi sử dụng các kiểu dữ liệu này trong thế giới thực, điều rất quan trọng là bạn hiểu rằng việc sử dụng các loại số nguyên nhất định có thể chỉ là quá mức hoặc được sử dụng. Ví dụ: sử dụng kiểu dữ liệu số nguyên cho workerCount trong bảng cho biết nhân viên có thể là một người quá mức vì nó hỗ trợ một phạm vi các giá trị nguyên từ ~ âm 2 tỷ đến dương 2 tỷ hoặc 0 đến xấp xỉ 4 tỷ (không dấu). Vì vậy, ngay cả khi bạn xem xét một trong những nhà tuyển dụng lớn nhất của Mỹ như Walmart với khoảng 2,2 triệu nhân viên sử dụng kiểu dữ liệu số nguyên cho cột workerCount là không cần thiết. Trong trường hợp như vậy, bạn sử dụng phương tiện trung bình (hỗ trợ từ 0 đến 16 triệu (chưa ký)) chẳng hạn. Đã nói rằng nếu phạm vi của bạn dự kiến sẽ lớn bất thường, bạn có thể xem xét bigint mà bạn có thể thấy từ Daniel '
Sự khác biệt là số lượng bộ nhớ được phân bổ cho mỗi số nguyên và số lượng mà mỗi số có thể lưu trữ.
Lưu trữ kiểu dữ liệu
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte
Thí dụ
Ví dụ sau đây tạo một bảng bằng cách sử dụng các kiểu dữ liệu bigint, int, smallint và tinyint. Các giá trị được chèn vào từng cột và được trả về trong câu lệnh SELECT.
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;