Kích thước cột int (11) trong mysql bằng byte là bao nhiêu?


488

Kích thước của cột int(11)trong mysql tính bằng byte là bao nhiêu?

Và giá trị tối đa có thể được lưu trữ trong cột này?



1
@cellepo một là chung sql cái khác là cụ thể cho mysql (cộng với cái này có nhiều lượt xem hơn). Nếu bạn muốn thực hiện một cuộc săn lừa và yêu cầu tôi nhanh chóng đóng chúng trong một lần bỏ phiếu, hãy truy cập trò chuyện SOBotics và ping tôi. Nhưng cái cần đóng phải được gắn thẻ mysqltrước khi tôi đến. Thx
vẽ

6
Này các cậu. Nó có thể trùng lặp, nhưng nó thân thiện hơn với tìm kiếm. Hầu hết mọi người thực hiện tìm kiếm như thế này bằng cách sử dụng int (11). và nó đang giải quyết câu hỏi của người khác. bạn có thể kiểm tra số lượt xem của nó so với lượt xem khác. và người dùng sẽ tìm thấy câu trả lời chi tiết hơn ở đây.
Gaurav

Câu trả lời:


685

An INTsẽ luôn là 4 byte cho dù độ dài được chỉ định là bao nhiêu.

  • TINYINT = 1 byte (8 bit)
  • SMALLINT = 2 byte (16 bit)
  • MEDIUMINT = 3 byte (24 bit)
  • INT = 4 byte (32 bit)
  • BIGINT = 8 byte (64 bit).

Độ dài chỉ xác định có bao nhiêu ký tự để đệm khi chọn dữ liệu với máy khách dòng lệnh mysql. 12345 được lưu trữ int(3)sẽ vẫn hiển thị là 12345, nhưng nếu nó được lưu trữ int(10)thì nó vẫn hiển thị là 12345, nhưng bạn sẽ có tùy chọn để điền năm chữ số đầu tiên. Ví dụ: nếu bạn thêm ZEROFILLnó sẽ hiển thị là 0000012345.

... và giá trị tối đa sẽ là 2147483647 (Đã ký) hoặc 4294967295 (Chưa ký)


111
Vậy ý nghĩa của 11 trong int (11) ở đây là gì.
Gaurav

73
Cột INT (4), số nguyên 1 sẽ được hiển thị là CHỈ 0001 nếu cột cũng được chỉ định là zerofill. Nếu không, nó sẽ chỉ được hiển thị là số 1, không có chữ số phụ. @Gaurav - không trộn lẫn cách mysql hiển thị dữ liệu và cách lưu trữ dữ liệu, đó là hai điều khác nhau. Những gì bạn thấy không phải là những gì nó thực sự có thể.
Michael JV

13
@Michael Wow, thực sự thú vị. Vì vậy, nếu bạn tạo cột INT (3) và lưu trữ giá trị 5001, nó sẽ lưu 5001 nhưng chỉ hiển thị 1. Tôi không biết điều đó.
andrewtweber

16
@andrewtweber: 5001sẽ hiển thị 5001ngay cả khi trường được xác định là INT(3). Xem @priyabagus trả lời dưới đây và ở đây .
go2null

10
Nếu bạn không cung cấp độ dài cho các trường nguyên, MySQL sẽ đặt giá trị mặc định (tinyint 4, smallint 6, Mediumint 9, int 11, bigint 20) Điều đáng lưu ý là các độ dài mặc định này đủ để hiển thị bất kỳ số nào có thể được lưu trữ trong trường này (ví dụ: giá trị tối đa nhỏ là 2 ^ 16 = 65536, 5 chữ số) Trừ khi bạn có lý do rất chính đáng để làm khác, tôi khuyên bạn nên để các kích thước mặc định để tránh những bất ngờ xấu.
Thibault Witzig

167

INT ( x ) sẽ chỉ tạo ra sự khác biệt về mặt hiển thị , nghĩa là hiển thị số bằng x chữ số và không bị giới hạn ở 11. Bạn ghép nối nó bằng cách sử dụng ZEROFILL, nó sẽ thêm vào các số 0 cho đến khi khớp với độ dài của bạn.

Vì vậy, với bất kỳ số lượng x trongINT(x)

  • nếu giá trị được lưu trữ có ít chữ số hơn x , ZEROFILLsẽ thêm vào các số không.

    INT (5) ZEROFILL với giá trị được lưu là 32 sẽ hiển thị 00032
    INT (5) với giá trị được lưu là 32 sẽ hiển thị 32
    INT với giá trị được lưu là 32 sẽ hiển thị 32

  • nếu giá trị được lưu trữ có nhiều chữ số hơn x , nó sẽ được hiển thị như hiện tại.

    INT (3) ZEROFILL với giá trị được lưu trữ là 250000 sẽ hiển thị 250000
    INT (3) với giá trị được lưu trữ là 250000 sẽ hiển thị 250000
    INT với giá trị được lưu trữ là 250000 sẽ hiển thị 250000

Giá trị thực được lưu trữ trong cơ sở dữ liệu không bị ảnh hưởng, kích thước vẫn như cũ và mọi tính toán sẽ hoạt động bình thường.

Điều này cũng áp dụng cho BIGINT, MEDIUMINT, SMALLINT và TINYINT.


49
Vì vậy, độ dài hoàn toàn không có gì trừ khi bạn sử dụng zerofill?
nhà phát triển xe máy

29
@developerbmw - Đúng. Độ dài hoàn toàn không có gì trừ khi bạn sử dụng ZEROFILL.
Rick James

ZEROFILL về cơ bản là chế độ tương thích máy tính lớn.
Henk Poley

114

Theo đây , int(11)sẽ lấy 4 byte không gian là 32 bit không gian với 2^(31) = 2147483648giá trị tối đa và -2147483648giá trị tối thiểu. Một bit là cho dấu hiệu.


1
Ví dụ của bạn có 9 số. Bạn có thể vui lòng xác nhận rằng ví dụ của bạn là chính xác? Nếu vậy, tại sao nó nói 10 khi có 9 số 9? Đây có phải là số chữ số cộng với một ký tự cộng với ký tự không?
Homer6

5
Không, số tối đa là 4294967295 nếu không dấu int, tức là 2 ^ 32. Số trong ngoặc không ảnh hưởng đến loại lưu trữ. Nếu bạn cần nhiều hơn 2 ^ 32, bạn cần đến bigint.
Kieran Tully

7
Hay đúng hơn, (2 ^ 32) -1.
Kieran Tully

2
+ Kieran nói đúng. Số lượng tối đa là khác nhau trong câu trả lời. Xem tại đây
daviewales

38

Như những người khác đã nói, giá trị tối thiểu / tối đa mà cột có thể lưu trữ và dung lượng lưu trữ trong byte chỉ được xác định bởi loại chứ không phải độ dài.

Rất nhiều câu trả lời trong số này nói rằng (11)phần này chỉ ảnh hưởng đến chiều rộng màn hình không chính xác, nhưng chủ yếu.

Một định nghĩa về int(2)với không zerofill định sẽ:

  • vẫn chấp nhận một giá trị của 100
  • vẫn hiển thị giá trị 100khi đầu ra (không 0hoặc 00)
  • các chiều rộng hiển thị sẽ là chiều rộng của đầu ra giá trị hạnh phúc lớn nhất từ truy vấn chọn.

Điều duy nhất (2)sẽ làm là nếu zerofill cũng được chỉ định :

  • một giá trị 1sẽ được hiển thị 01.
  • Khi hiển thị các giá trị, cột sẽ luôn có chiều rộng của giá trị tối đa có thể mà cột có thể lấy là 10 chữ số cho một số nguyên, thay vì độ rộng tối thiểu cần thiết để hiển thị giá trị lớn nhất mà cột cần hiển thị trong truy vấn chọn cụ thể đó , có thể nhỏ hơn nhiều.
  • Cột vẫn có thể lấy và hiển thị giá trị vượt quá độ dài, nhưng các giá trị này sẽ không được thêm tiền tố bằng 0.

Cách tốt nhất để xem tất cả các sắc thái là chạy:

CREATE TABLE `mytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `int1` int(10) NOT NULL,
    `int2` int(3) NOT NULL,
    `zf1` int(10) ZEROFILL NOT NULL,
    `zf2` int(3) ZEROFILL NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `mytable` 
(`int1`, `int2`, `zf1`, `zf2`) 
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);

select * from mytable;

cái nào sẽ xuất ra:

+----+-------+-------+------------+-------+
| id | int1  | int2  | zf1        | zf2   |
+----+-------+-------+------------+-------+
|  1 | 10000 | 10000 | 0000010000 | 10000 |
|  2 |   100 |   100 | 0000000100 |   100 |
+----+-------+-------+------------+-------+

Câu trả lời này được thử nghiệm dựa trên MySQL 5.7.12 cho Linux và có thể hoặc không thể thay đổi đối với các triển khai khác.


5
"Lưu ý rằng cột int1 có chiều rộng hiển thị nhỏ hơn nhiều so với zerofill2 mặc dù chiều dài lớn hơn" ... Ehm, đó chỉ là vì tên cột 'zerofill2' dài 9 ký tự so với 'int1' là 4.
neokio

2
... Vâng, do đó, độ dài rõ ràng không có hiệu lực, ngay cả về chiều rộng màn hình khi zerofill không được bật. Nếu không thì int1 sẽ rộng hơn nhiều với chiều rộng 10 ký tự thay thế.
trình viên

2
Một lời giải thích tốt với một ví dụ vững chắc. Cách trả lời tốt hơn so với câu trả lời. Cảm ơn bạn @ Chương trình.
Corin

Nit nhỏ: Như neokio chỉ ra, không thể quan sát từ truy vấn này hậu quả chính xác của "int (3)" với không điền. Rút ngắn tên cột thành "zf2", để làm cho hành vi rõ ràng hơn. Cụ thể, dù đúng hay sai [trên phiên bản DB đã cho] rằng "(với zerofill) Khi hiển thị các giá trị, cột sẽ luôn có chiều rộng của giá trị tối đa có thể mà cột có thể lấy là 10 chữ số cho một số nguyên"
ToolmakerSteve

1
Để làm rõ nhận xét của neokio và nhận xét nit nhỏ của tôi: Câu "Lưu ý cách cột int1 có chiều rộng hiển thị nhỏ hơn nhiều so với zerofill2 mặc dù chiều dài lớn hơn." nên được loại bỏ khỏi câu trả lời. Đó là hệ quả của số lượng ký tự trong từ tiêu đề "zerofill2" - nó không liên quan gì đến việc kiểm tra độ rộng màn hình. Tốt hơn là cung cấp cho cột đó một tên ngắn hơn, ví dụ "zf2". Sau đó, chúng ta sẽ có một bảng trong đó "int1, int2 và zf2 đều có cùng chiều rộng, mặc dù int2 và zf2 chỉ định chiều rộng nhỏ (3)".
ToolmakerSteve

32

Kích thước cột int (11) trong mysql bằng byte là bao nhiêu?

(11)- thuộc tính này của intkiểu dữ liệu không liên quan gì đến kích thước của cột. Nó chỉ là chiều rộng hiển thị của kiểu dữ liệu số nguyên. Từ 11.1.4.5. Thuộc tính loại số :

MySQL hỗ trợ một phần mở rộng để tùy chọn chỉ định chiều rộng hiển thị của các loại dữ liệu số nguyên trong ngoặc đơn theo từ khóa cơ sở cho loại. Ví dụ: INT (4) chỉ định INT có chiều rộng hiển thị gồm bốn chữ số.


19

Một lời giải thích tốt cho điều này có thể được tìm thấy ở đây

Để tóm tắt: Số N trong int (N) thường bị nhầm lẫn bởi kích thước tối đa được phép cho cột, giống như trong trường hợp varchar (N).

Nhưng đây không phải là trường hợp với các kiểu dữ liệu Integer - số N trong ngoặc đơn không phải là kích thước tối đa cho cột, mà chỉ đơn giản là một tham số để cho MySQL biết chiều rộng nào sẽ hiển thị cột khi dữ liệu của bảng được xem qua MySQL bảng điều khiển (khi bạn đang sử dụng thuộc tính ZEROFILL).

Số trong ngoặc sẽ cho MySQL biết có bao nhiêu số không để nhập số nguyên đến. Ví dụ: Nếu bạn đang sử dụng ZEROFILL trên một cột được đặt thành INT (5) và số 78 được chèn, MySQL sẽ đệm giá trị đó bằng các số 0 cho đến khi số thỏa mãn số trong ngoặc. tức là 78 ​​sẽ trở thành 00078 và 127 sẽ trở thành 00127. Để tổng hợp: Số trong ngoặc được sử dụng cho mục đích hiển thị.
Nói cách khác, số trong ngoặc là loại vô dụng trừ khi bạn đang sử dụng thuộc tính ZEROFILL.

Vì vậy, kích thước cho int sẽ vẫn giữ nguyên, ví dụ: -2147483648 đến 2147483648 cho chữ ký0 đến 4294967295 cho dấu không dấu(~ 2,15 tỷ và 4,2 tỷ, đó là một trong những lý do khiến các nhà phát triển vẫn không biết câu chuyện đằng sau Số N trong ngoặc đơn, vì nó hầu như không ảnh hưởng đến cơ sở dữ liệu trừ khi nó chứa hơn 2 tỷ hàng) và về mặt byte sẽ là 4 byte .

Để biết thêm thông tin về kích thước / phạm vi Số nguyên, hãy tham khảo Hướng dẫn sử dụng MySQL


Tại sao số lượng hàng vào chơi ở đây?
Geezer cũ

@OldGeezer - đồng ý, "số lượng hàng" không liên quan đến hầu hết các cột. Chỉ liên quan đến cột khóa chính (id) tự động tăng.
ToolmakerSteve

10

Mặc dù câu trả lời này khó có thể được nhìn thấy, tôi nghĩ rằng việc làm rõ sau đây là đáng để thực hiện:

  • (n) đằng sau một kiểu dữ liệu số nguyên trong MySQL đang chỉ định chiều rộng hiển thị
  • chiều rộng hiển thị KHÔNG giới hạn độ dài của số được trả về từ truy vấn
  • chiều rộng hiển thị DOES giới hạn số lượng không được điền cho cột được điền bằng 0 để tổng số khớp với chiều rộng hiển thị (miễn là số thực không vượt quá chiều rộng hiển thị, trong trường hợp đó, số được hiển thị như là)
  • chiều rộng hiển thị cũng có nghĩa là một công cụ hữu ích cho các nhà phát triển để biết chiều dài của giá trị sẽ được đệm vào


Rõ ràng, BIT OF CHI TIẾT chiều rộng màn hình hiển thị nhằm cung cấp một số siêu dữ liệu về số lượng không hiển thị trong một số không.
Nó KHÔNG thực sự giới hạn độ dài của một số được trả về từ một truy vấn nếu số đó vượt quá độ rộng hiển thị được chỉ định.
Để biết chiều dài / chiều rộng thực sự được phép cho một kiểu dữ liệu số nguyên trong MySQL, hãy xem danh sách & liên kết: ( các loại: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Vì vậy, đã nói ở trên, bạn có thể mong đợi chiều rộng hiển thị không ảnh hưởng đến kết quả từ truy vấn tiêu chuẩn, trừ khi các cột được chỉ định là cột ZEROFILL
HOẶC
trong trường hợp dữ liệu được kéo vào ứng dụng & ứng dụng đó đang thu thập chiều rộng hiển thị để sử dụng cho một số loại đệm khác.

Tài liệu tham khảo chính: https://bloss.oracle.com/jsmyth/entry/what_does_the_11_mean


Cảm ơn bạn đã cung cấp câu trả lời thích hợp. Tôi đã thử từ dòng lệnh MySQL và tôi không thể làm cho nó mất bất kỳ chữ số nào với số nhỏ n, vì vậy ... vâng, đó là chuyện nhảm nhí. Nó chỉ làm bất cứ điều gì với zerofill.
mở

@mpen rất vui vì tôi có thể giúp, điều này có liên quan đến thứ tôi đang thử và hình dung tôi có thể đưa thêm chi tiết về nó ở đây có thể hữu ích cho người khác.
MER

9

Trong MySQL số ​​nguyên int(11)có kích thước là 4 byte bằng 32 bit.

Giá trị đã ký là: - 2^(32-1) to 0 to 2^(32-1)-1 = -2147483648 to 0 to 2147483647

Giá trị chưa ký là: 0 to 2^32-1 = 0 to 4294967295


0

theo cuốn sách này :

MySQL cho phép bạn chỉ định một chiều rộng của người dùng cho các kiểu số nguyên, chẳng hạn như INT (11). Điều này là vô nghĩa đối với hầu hết các ứng dụng: nó không giới hạn phạm vi giá trị hợp pháp, mà chỉ xác định số lượng ký tự mà các công cụ tương tác của MySQL sẽ dành cho mục đích hiển thị. Đối với mục đích lưu trữ và tính toán, INT (1) giống hệt INT (20).


-4

Tôi nghĩ giá trị tối đa của int (11) là 4294967295


2
Đó là 2147483647 vì nó có dấu hiệu.
d3bit

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.