Book a Demo Start Instantly

MySQL offers a variety of integer data types that cater to different sizes and ranges of numerical values. Understanding these data types is crucial for designers and developers alike to ensure efficient database performance and to prevent unnecessary storage use. This article explores the significance of MySQL integer data types, diving into their characteristics and providing practical guidance on their use.

Understanding MySQL Integer Types

MySQL integer types are fundamental data types that allow the storage of numeric data without decimal points. They are essential for storing values such as counts, identifiers, and other numerical data in a compact and efficient manner. The choice of the right integer type impacts the database’s performance, storage efficiency, and data integrity.

MySQL supports five primary integer types: TINYINT, SMALLINT, MEDIUMINT, INT (INTEGER), and BIGINT. Each of these types is tailored to store numbers within specific ranges, accommodating various application needs from small counters to large identifiers.

TiDB is the most advanced, open source, distributed SQL database with MySQL compatibility. TiDB supports all the MySQL integer types, for more information, see Integer types in TiDB.

Detailed Analysis of Each Integer Type


TINYINT uses one byte of storage and can hold values from -128 to 127 when signed, and 0 to 255 when unsigned. TINYINT is ideal for storing small quantities, such as the number of attempts for an action or to flag binary values (e.g., 0 or 1 for FALSE or TRUE).


SMALLINT consumes two bytes and accommodates numbers from -32,768 to 32,767 in the signed form and 0 to 65,535 when unsigned. This type is suitable for somewhat larger quantities, such as the number of days in a year or a small inventory count.


MEDIUMINT requires three bytes and can store -8,388,608 to 8,388,607 for signed and 0 to 16,777,215 for unsigned values. It suits medium-sized ranges, like population counts of cities or counts of items in larger inventories.


INT utilizes four bytes, offering a range of -2,147,483,648 to 2,147,483,647 in its signed version and 0 to 4,294,967,295 for unsigned integers. It’s widely used for standard numeric identifiers, such as user IDs in a system with a broad user base.


BIGINT occupies eight bytes and supports -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 for signed integers and 0 to 18,446,744,073,709,551,615 when unsigned. This type is best for very large quantities, like global transaction IDs in distributed systems, ensuring that the system will not run out of unique identifiers.

Practical Applications and Best Practices

Choosing the Right Integer Type

When selecting an integer type, consider the data’s range, the storage space, and the application’s future scalability. Opt for the smallest data type that can handle your range of values to conserve storage and enhance performance.

Avoid defaulting to INT or BIGINT without evaluating the actual data needs, as this can lead to wasted storage space and reduced efficiency.

Performance Considerations

Choosing the appropriate integer type can significantly affect database performance. Smaller data types lead to smaller indexes, which enhances the speed of index scanning and maintenance operations.

Use unsigned types when negative values are not needed to double the range of positive values the type can store. Regularly analyze your data to adjust integer types as your application scales, ensuring optimal performance and storage usage.

In conclusion, MySQL’s integer data types are powerful tools for efficiently managing numeric data. By understanding and leveraging these types judiciously, developers and database administrators can ensure robust performance, efficient storage utilization, and scalable applications capable of handling a wide range of numerical data.

Last updated May 31, 2024

Spin up a Serverless database with 25GiB free resources.

Start Now