Giải pháp cho sự nhầm lẫn của bạn là-
Trong Mysql, int (6) không có nghĩa là chúng có thể lưu trữ tới 6 chữ số. không quá 999999.
Tuy nhiên CHAR (6) Điều này có nghĩa là một cột ký tự, có độ dài tối đa là 6 ký tự, chẳng hạn như các từ sau:
nhà
Nếu tôi cố gắng lưu trữ từ “đặc biệt” trong cột đó, MySQL sẽ cắt giá trị thành “specia”, vì từ gốc có 7 ký tự.
Dù sao, tất cả các cột số nguyên đều có phạm vi giá trị đặt trước được phép. Số trong ngoặc đơn chỉ cho biết chiều rộng màn hình.
Điều này có lẽ vẫn còn khó hiểu, vì vậy hãy để tôi giải thích thêm…
Chiều rộng hiển thị là một số từ 1 đến 255. Bạn có thể đặt chiều rộng hiển thị nếu bạn muốn tất cả các giá trị số nguyên của mình “xuất hiện” tương tự:
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
M cho biết chiều rộng hiển thị tối đa cho các kiểu số nguyên. Chiều rộng hiển thị tối đa là 255. Chiều rộng hiển thị không liên quan đến phạm vi giá trị mà một loại có thể chứa,. Đối với kiểu dấu phẩy động và dấu phẩy cố định, M là tổng số chữ số có thể được lưu trữ.
Nếu bạn chỉ định ZEROFILL cho một cột số, MySQL sẽ tự động thêm thuộc tính UNSIGNED vào cột.
Vì vậy, Câu trả lời cho Câu hỏi của bạn là
create table foo
(
col2 tinyint(2) unsigned zerofill, col4 tinyint(4) unsigned zerofill, col5notzerofill tinyint(5)
)engine=innodb;
insert into foo values (1,2,3),(11,12,14),(123,123,156),(1234,1234,12756);
select * from foo;
OUTPUT :-
+------+------+-----------------+
| col2 | col4 | col5notzerofill |
+------+------+-----------------+
| 01 | 0002 | 3 |
| 11 | 0012 | 14 |
| 123 | 0123 | 127 |
| 255 | 0255 | 127 |
+------+------+-----------------+
* Vì vậy, hãy hiểu, trong Mysql chiều rộng hiển thị chỉ hoạt động với không điền.
* nếu bạn sử dụng, đừng sử dụng zerofill, nó không hiệu quả.
Và nếu bạn sử dụng zerofill thì mysql sẽ kiểm tra chiều rộng hiển thị và nếu bạn không chỉ định thì mysql sẽ tự động chỉ định chiều rộng hiển thị cho cột đó. *