Sự khác biệt giữa tinyint, smallint, Mediumint, bigint và int trong MySQL là gì?


368

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:


575

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 NUMBERkiể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ú ý: tinyinttrong SQL Server không dấu và có phạm vi giá trị từ 0 đến 255


21
Tôi không biết rằng các loại không dấu chỉ có sẵn trong MySQL, đây là một lợi thế rất lớn của MySQL so với các RDBMS khác. Bất cứ điều gì thay đổi kể từ ngày câu trả lời này được đăng?
Biox

3
@Daniel, họ đang nghĩ gì, tại sao lại có một cho 3 byte nhưng không có gì cho 6 byte?
Pacerier

10
@Pacerier có lẽ họ không biết cách đặt tên :))
Mihai Matei

5
Họ nên gọi đó là một bigint và thay vì bigint, một humongousint.
MarioDS

5
Greatint có thể là một lựa chọn, là một công ty của Hoa Kỳ. :)
osiris

32

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


15

Chúng dường như là kiểu dữ liệu của MySQL.

Theo tài liệu họ lấy:

  1. tinyint = 1 byte
  2. smallint = 2 byte
  3. trung bình = 3 byte
  4. int = 4 byte
  5. bigint = 8 byte

Và, một cách tự nhiên, chấp nhận phạm vi số ngày càng lớn hơn.


9

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 '


2
Trong ví dụ của bạn về WalMart với 2,2 triệu nhân viên hoạt động - Tôi sẽ nghĩ rằng với doanh thu nhân viên khoảng 50% hàng năm, một loại INT trên EmployeeID sẽ là mức tối thiểu cần thiết. Bạn nghĩ gì? Cấp - đối với các công ty bình thường nhất, loại INT sẽ là CÁCH quá mức!
kiltannen

3

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ữ.


2

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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.