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?
mysql
trước khi tôi đến. Thx
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?
mysql
trước khi tôi đến. Thx
Câu trả lời:
An INT
sẽ 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 ZEROFILL
nó sẽ hiển thị là 0000012345.
... và giá trị tối đa sẽ là 2147483647 (Đã ký) hoặc 4294967295 (Chưa ký)
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 , ZEROFILL
sẽ 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.
ZEROFILL
.
Theo đây , int(11)
sẽ lấy 4 byte không gian là 32 bit không gian với 2^(31) = 2147483648
giá trị tối đa và -2147483648
giá trị tối thiểu. Một bit là cho dấu hiệu.
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ẽ:
100
100
khi đầu ra (không 0
hoặc 00
)Điều duy nhất (2)
sẽ làm là nếu zerofill cũng được chỉ định :
1
sẽ được hiển thị 01
.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.
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 int
kiể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ố.
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ý và 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
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:
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
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.
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
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).
4294967295 là câu trả lời, vì int (11) hiển thị tối đa 11 chữ số IMO