Rất nhiều bạn thiết kế CSDL thường đặt int(11) và nghĩ rằng con số 11 có nghĩa là trường dữ liệu dài 11 số hoặc có 11 bit. Sau đó nghĩ rằng nếu trường dữ liệu có khoảng 8 số sẽ đặt int(8). Thực tế con số 11 hay 8 nó không có ý nghĩa như vậy mà nó mang ý nghĩa hoàn toàn khác. Con số đó chỉ ra độ dài của trường dữ liệu sẽ được lấp đầy bằng số 0. Ví dụ cụ thể:
`field1` int(10) ZEROFILL NOT NULL,
`field2` int(3) ZEROFILL NOT NULL
Khi đó nếu chèn dữ liệu vào ta thu được kết quả như sau:
field1
10
kết quả0000000010
1000
kết quả0000001000
field2
10
kết quả010
1000
kết quả1000
Khi tạo CSDL nếu không chỉ định ZEROFILL
thì việc dùng int(11)
, int(8)
, int(1)
thì hoàn toàn tương tự nhau, vẫn tốn 4 bytes bộ nhớ và giá trị vẫn có thể nằm trong khoảng từ 0 - 4.294.967.295 (hoặc -2.147.483.647 đến 2.147.483.647 nếu có dấu)
Chọn cách thiết kế cho phù hợp:
Đối với kiểu số, ta có các loại sau Click để xem. Như vậy nếu không quan tâm đến ZEROFILL
ta áp dụng
TINYINT(XX)
cho số không âm từ 0 đến 255 (hoặc số âm từ -127 đến 127) 3 ký tựSMALLINT(XX)
cho số không âm từ 0 đến 65.535 (hoặc số âm từ -32.767 đến 32.767) 5 ký tựMEDIUMINT(XX)
cho số không âm từ 0 đến 16.777.215 (hoặc số âm từ -8.388.607 đến 8.388.607) 8 ký tựINT(XX)
cho số không âm từ 0 đến 4.294.967.295 (hoặc số âm từ -2.147.483.647 đến 2.147.483.647) 10 ký tựBIGINT(XX)
cho số không âm từ 0 đến 2^64-1 (hoặc số âm từ -2^63-1 đến 2^63-1) 20 ký tự
Lưu ý:
ZEROFILL
thì dữ liệu là số không âm- Giá trị
XX
nên đặt là chiều dài tối đa (tính theo số ký tự hiển thị) của trường dữ liệu giúp người đọc dễ dàng hiểu ý đồ của người thiết kế. Trong khoảng từ 1 - 255 nếu bỏ trống (bằng 0) sẽ mặc định bằng số ký tự tối đa tùy kiểu dữ liệu list bên trên