Theo như tôi biết, chỉ có một khác biệt nhỏ là khi bạn đang cố chèn giá trị nằm ngoài phạm vi.
Trong ví dụ tôi sẽ sử dụng 401421228216
, đó là 101110101110110100100011101100010111000
(chiều dài ký tự)
- Nếu bạn có
INT(20)
cho hệ thống này có nghĩa là phân bổ trong bộ nhớ tối thiểu 20 bit. Nhưng nếu bạn sẽ chèn giá trị lớn hơn 2^20
, nó sẽ được lưu trữ thành công, chỉ khi nó là ít hơn INT(32) -> 2147483647
(hoặc 2 * INT(32) -> 4294967295
cho UNSIGNED
)
Ví dụ:
mysql> describe `test`;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(20) unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
1 row in set (0,00 sec)
mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
mysql> SET sql_mode = '';
Query OK, 0 rows affected, 1 warning (0,00 sec)
mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected, 1 warning (0,06 sec)
mysql> SELECT * FROM `test`;
+------------+
| id |
+------------+
| 4294967295 |
+------------+
1 row in set (0,00 sec)
- Nếu bạn có
BIGINT(20)
cho hệ thống này có nghĩa là phân bổ trong bộ nhớ tối thiểu 20 bit. Nhưng nếu bạn sẽ chèn giá trị lớn hơn 2^20
, nó sẽ được lưu trữ thành công, nếu nó ít hơn BIGINT(64) -> 9223372036854775807
(hoặc 2 * BIGINT(64) -> 18446744073709551615
cho UNSIGNED
)
Ví dụ:
mysql> describe `test`;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id | bigint(20) unsigned | YES | | NULL | |
+-------+---------------------+------+-----+---------+-------+
1 row in set (0,00 sec)
mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected (0,04 sec)
mysql> SELECT * FROM `test`;
+--------------+
| id |
+--------------+
| 401421228216 |
+--------------+
1 row in set (0,00 sec)
Nguồn
2017-10-12 14:14:17
Ồ, bài đăng này đã làm sáng tỏ sự nhầm lẫn của tôi về vấn đề này một cách hoàn hảo. Có vẻ như một sự lựa chọn kỳ quặc bởi các nhà phát triển - như tôi đã đoán nó là chiều rộng + giá trị tối đa, hoặc bit/etc. – Sh4d0wsPlyr
'nó chỉ ảnh hưởng đến tùy chọn ZEROFILL:' bây giờ sự tò mò của tôi kết thúc – Umair
Tôi thực sự mong rằng họ đã thiết kế cú pháp với màn hình hiển thị với trên ZEROFILL thay vì INT. Ví dụ: 'bar INT ZEROFILL (20)'. Nó sẽ rõ ràng hơn rất nhiều. Nhưng quyết định đó đã được thực hiện một thời gian dài trước đây, và thay đổi nó bây giờ sẽ phá vỡ hàng triệu cài đặt cơ sở dữ liệu. –