2010-05-15 40 views
7

Tôi dường như thấy rất nhiều người tự ý gán các kích thước lớn cho các trường khóa chính/ngoài trong các lược đồ MySQL của chúng, chẳng hạn như INT (11) và thậm chí BIGINT (20) khi WordPress sử dụng.MySQL chính/kích thước khóa ngoài?

Bây giờ, hãy sửa tôi nếu tôi sai, nhưng ngay cả INT (4) cũng sẽ hỗ trợ các giá trị (chưa ký) lên tới hơn 4 tỷ. Thay đổi nó thành INT (5) và bạn cho phép các giá trị lên đến một nghìn tỷ, nhiều hơn mức bạn cần, trừ khi bạn có thể lưu trữ dữ liệu địa lý tại NASA/Google, điều mà tôi chắc chắn hầu hết chúng ta đều không.

Có lý do nào để mọi người sử dụng các kích thước lớn như vậy cho khóa chính của họ không? Có vẻ như một sự lãng phí đối với tôi ...

+1

Không, trường kích thước nằm trong các ký tự không phải byte nhị phân. Vì vậy, int (4) chỉ có thể chứa tới 9999 (theo lý thuyết; cơ sở dữ liệu có thể lưu trữ nội bộ lớn hơn). INT (11) thực sự chỉ là một số 32-bit. – MarkR

Trả lời

10

Kích thước không phải là bit hay byte. Chỉ là chiều rộng màn hình, là được sử dụng khi trường có ZEROFILL được chỉ định.

INT [(M)] [UNSIGNED] [ZEROFILL] Một bình thường có kích thước nguyên. Các ký phạm vi là -2147483648 đến 2147483647. Các phạm vi unsigned là từ 0 đến 4294967295.

Xem this explanation.

0

Tôi không thấy bất kỳ lý do chính đáng nào để sử dụng số lớn hơn số nguyên 32 bit để lập chỉ mục dữ liệu trong cơ sở dữ liệu có kích thước kinh doanh thông thường. Hầu hết trong số họ có thể có hàng triệu hồ sơ (hoặc thứ tự độ lớn).

+0

Cả MySQL cũng không. Chúng sử dụng các số nguyên 32 bit cho kiểu dữ liệu INT. Số trong() không mang về số bit. –

Các vấn đề liên quan