Numerical data are divided into exact and approximate, integer and real. Bit values are a separate category.
Integers can be declared with the keyword UNSIGNED. In this case, the elements of this column it will not be possible to assign negative values, and the valid range, which takes on the type doubles. So, type TINYINT can take values from -128 to 127, and TINYINT UNSIGNED — from 0 to 255.
Type DECIMAL stores exact real values data. It is used when accuracy is critical. For example, when storing financial data.
CREATE TABLE Users ( ... salary DECIMAL(5,2) );
This example declares that the salary column will store numbers, having a maximum of 5 digits, 2 of which are reserved for decimal part. That is, this column will store values in the range from -999.99 to 999.99.
The syntax DECIMAL is equivalent to DECIMAL(M) and DECIMAL(M,0). By default, the parameter M is 10.
The whole part and the part after the point are stored as 2 separate integers. On Based on this fact, the amount of memory consumed can be easily calculated. So for DECIMAL(5,2) the integer part contains 3 digits and takes 2 byte, part after the point have 2 digits - 1 byte is enough. Total for storage will be spent 3 byte.
Type BIT(M) stores a sequence of bits a given length. By default, the length is 8 bit. If assigned the value in a column of this type uses less than M bit, then zeros are padded on the left. For example, when trying to write the value b'101' to BIT(6) will eventually be stored b'000101'.
Numeric floating point data types can also have a parameter UNSIGNED. As with integer types, this attribute prevents negative storage in the marked column values, but, unlike integer types, the maximum interval for column values remains the same.