331

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?

|
521

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

|
28

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

tinyint 1 byte, 0 đến 255

smallint 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)

bigint 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

|
12

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.

|
8

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ị số 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 Hoa Kỳ 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 '

|
  • 1

    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 thì 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!

    – Lý Thái Thảo 03:03:46 22/02/2018
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

Kiểu lưu trữ phạm vi 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á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;
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.