1. Introduction
MySQL là một hệ quản trị cơ sở dữ liệu quan hệ phổ biến, được sử dụng rộng rãi trong nhiều ứng dụng web và hệ thống. Các kiểu dữ liệu INT trong MySQL thường được dùng để lưu trữ các giá trị số nguyên. Trong một số trường hợp, chúng ta sẽ khám phá các giá trị tối đa mà kiểu INT hỗ trợ và cách chúng được sử dụng một cách hiệu quả. Bài viết này cung cấp một giải thích chi tiết về kiểu dữ liệu INT trong MySQL, bao gồm cả cách khai thác các giá trị tối đa được hỗ trợ bởi kiểu INT và cách sử dụng chúng một cách hợp lý.
Các thông số cơ bản của kiểu INT
- Signed (SIGNED) :
- Giá trị tối thiểu: -2,147,483,648
- Giá trị tối đa: 2,147,483,647
- Unsigned (UNSIGNED) :
- Giá trị tối thiểu: 0
- Giá trị tối đa: 4,294,967,295
Kích thước lưu trữ của INT
Kiểu INT luôn chiếm 4 byte bộ nhớ. Kích thước này không thay đổi bất kể giá trị được lưu trữ. Do đó, nếu bạn không cần một phạm vi số rất lớn, việc sử dụng các kiểu dữ liệu nhỏ hơn (ví dụ TINYINT hoặc SMALLINT) sẽ hiệu quả hơn.
Các trường hợp sử dụng INT
Kiểu INT thường được dùng trong các tình huống sau:
- Giá trị tự tăng (ví dụ: ID người dùng, số đơn hàng)
- Dữ liệu số nguyên dùng trong các phép tính hoặc xử lý thống kê (ví dụ: số lượng tồn kho, số lần nhấp)
- Dữ liệu nằm trong một phạm vi cố định (ví dụ: tuổi hoặc điểm kiểm tra)
Trong những trường hợp này, bạn cần cân nhắc phạm vi số cần thiết và hiệu suất bộ nhớ.
3. What Does M Mean in INT(M)?
What Is Display Width (M)?
Trong MySQL, M trong INT(M) đại diện cho “độ rộng hiển thị”. Nó không ảnh hưởng đến giá trị số thực tế được lưu trữ trong cơ sở dữ liệu; thay vào đó, nó xác định cách giá trị được định dạng khi hiển thị. Ví dụ, nếu khai báo INT(5), số sẽ được hiển thị với độ rộng 5 chữ số.
Tuy nhiên, độ rộng hiển thị M chỉ có ý nghĩa trong trường hợp sau:
- Khi tùy chọn ZEROFILL được bật
- Ví dụ: Với
INT(5) ZEROFILL, nếu giá trị là123, nó sẽ hiển thị dưới dạng00123.
Lưu ý quan trọng về ZEROFILL
Khi sử dụng tùy chọn ZEROFILL, các đặc điểm sau sẽ áp dụng:
- Các số 0 phía trước sẽ tự động được thêm vào bên trái.
- Thuộc tính
UNSIGNEDsẽ được tự động áp dụng.
Do đó, nếu bạn cần lưu trữ các giá trị âm, không thể sử dụng ZEROFILL.
Giải thích các hiểu lầm phổ biến
Nhiều người mới bắt đầu nhầm tưởng rằng M giới hạn giá trị tối đa có thể lưu. Thực tế, M chỉ ảnh hưởng đến định dạng hiển thị và không có bất kỳ ảnh hưởng nào đến phạm vi lưu trữ thực tế.
4. Comparison with Other Integer Types
Các loại dữ liệu số nguyên và phạm vi của chúng
MySQL cung cấp các kiểu số nguyên sau:
| Type Name | Bytes | Signed Range | Unsigned Range |
|---|---|---|---|
| TINYINT | 1 byte | -128 to 127 | 0 to 255 |
| SMALLINT | 2 bytes | -32,768 to 32,767 | 0 to 65,535 |
| MEDIUMINT | 3 bytes | -8,388,608 to 8,388,607 | 0 to 16,777,215 |
| INT | 4 bytes | -2,147,483,648 to 2,147,483,647 | 0 to 4,294,967,295 |
| BIGINT | 8 bytes | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | 0 to 18,446,744,073,709,551,615 |
Tiêu chí lựa chọn
Sử dụng các hướng dẫn sau khi chọn kiểu dữ liệu phù hợp trong thiết kế cơ sở dữ liệu:
- Nếu phạm vi nhỏ: Dùng
TINYINThoặcSMALLINTđể tiết kiệm bộ nhớ. - Nếu cần một phạm vi rất lớn: Dùng
BIGINT. - Nếu muốn sử dụng đa năng:
INTthường là lựa chọn tối ưu.
5. Changes Since MySQL 8.0.17
Loại bỏ độ rộng hiển thị (M)
Bắt đầu từ MySQL 8.0.17, “độ rộng hiển thị (M)” cho các kiểu số nguyên đã bị loại bỏ. Thay đổi này được giới thiệu cùng với việc ngừng hỗ trợ tùy chọn ZEROFILL, và có thể sẽ bị xóa hoàn toàn trong các phiên bản MySQL tương lai.
Các lý do loại bỏ độ rộng hiển thị như sau:
- Gây ra hiểu lầm:
- Nhiều người dùng nhầm tưởng rằng
Mảnh hưởng đến giá trị tối đa có thể lưu hoặc số chữ số.
- Hạn chế trong việc sử dụng thực tế:
- Vì
Mchỉ kiểm soát định dạng hiển thị, việc định dạng hiện nay thường được thực hiện ở phía ứng dụng, giảm nhu cầu sử dụng tính năng này.
Loại bỏ ZEROFILL
The ZEROFILL option was also deprecated in the same version. Although ZEROFILL was convenient for padding numbers with leading zeros, it is no longer recommended for the following reasons:
- Các phương pháp thay thế phổ biến:
- Zero-padding can now be easily handled in the application or UI layer.
- Tránh gây nhầm lẫn:
- The automatic application of the
UNSIGNEDattribute when usingZEROFILLcaused confusion for beginner users.
Cách Thích Ứng Với Việc Loại Bỏ
In response to these deprecations, consider the following approaches in database design:
- Xử lý định dạng trong lớp ứng dụng:
- Perform zero-padding and formatting in the application or presentation layer.
- Example: Implement zero-padding using PHP or JavaScript.
- Áp dụng thiết kế không phụ thuộc vào độ rộng hiển thị:
- Define the
INTtype without specifyingMand focus on data accuracy rather than display formatting.
6. Phần Câu Hỏi Thực Tế
Các Câu Hỏi Thường Gặp
Câu hỏi 1. Điều gì xảy ra nếu tôi lưu một giá trị vượt quá mức tối đa của kiểu INT?
A. Trong MySQL, khi cố gắng lưu một giá trị ngoài phạm vi của kiểu INT sẽ gây ra lỗi. Bạn phải chọn một giá trị nằm trong phạm vi hỗ trợ hoặc chuyển sang kiểu dữ liệu có phạm vi lớn hơn (ví dụ, BIGINT).
Câu hỏi 2. Sự khác biệt giữa INT và BIGINT là gì?
A. Kiểu BIGINT sử dụng gấp đôi dung lượng lưu trữ so với INT (8 byte) và cung cấp một phạm vi số rất rộng. Ví dụ, phạm vi có dấu của BIGINT vượt quá ±9 quintillion, khiến nó phù hợp để xử lý các bộ dữ liệu rất lớn.
Câu hỏi 3. Sau khi ZEROFILL bị loại bỏ, tôi nên thực hiện hiển thị có đệm số 0 như thế nào?
A. Khuyến nghị thực hiện việc đệm số 0 trong lớp ứng dụng. Ví dụ, trong PHP bạn có thể dùng hàm str_pad(), và trong JavaScript bạn có thể dùng phương thức padStart() để thực hiện đệm số 0.
Câu hỏi 4. Tôi nên chọn giữa INT và các kiểu số nguyên khác như thế nào?
A. Chọn kiểu dựa trên phạm vi dữ liệu. Các giá trị số nhỏ (ví dụ, tuổi hoặc điểm) phù hợp với TINYINT, dữ liệu quy mô trung bình (ví dụ, ID người dùng) phù hợp với INT, và các giá trị rất lớn (ví dụ, dữ liệu giao dịch tài chính) phù hợp với BIGINT.
7. Kết Luận
Trong bài viết này, chúng tôi đã cung cấp giải thích chi tiết về kiểu dữ liệu INT của MySQL. Các điểm chính như sau:
- Hiểu sự khác biệt giữa các giá trị tối đa và tối thiểu có dấu và không dấu của kiểu
INTlà nền tảng cho thiết kế dữ liệu đúng. - Việc hiểu các phương pháp thay thế cho các tùy chọn “độ rộng hiển thị (M)” và “ZEROFILL” đã bị loại bỏ và thiết kế cơ sở dữ liệu có thể thích ứng với các cập nhật MySQL trong tương lai là rất quan trọng.
- Chọn kiểu số nguyên phù hợp dựa trên đặc điểm dữ liệu để xây dựng một cơ sở dữ liệu hiệu quả và dễ bảo trì.
Sử dụng bài viết này làm tài liệu tham khảo để tối ưu việc sử dụng kiểu INT và nâng cao hiệu quả trong thiết kế cơ sở dữ liệu MySQL.


