MySQL: Ý nghĩa con số 11 trong int(11)

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
Bình luận (0)