一、整数型数据类型
名称 | 大小(字节数) | 范围(无符号) | 范围(有符号) |
TINYINT | 1 | 0-255 | -2^8~2^8-1 |
SMALLINT | 2 | 0-65535 | -2^16~2^16-1 |
MEDIUMINT | 3 | 0-2^24-1 | -2^24~2^24-1 |
INT | 4 | 0-2^32-1 | -2^32~2^32-1 |
BIGINT | 8 | 0-2^64-1 | -2^64~2^64-1 |
二、浮点型数据类型
名称 | 大小(字节数) | 正数范围 | 负数范围 | 类型 | 适用场景 |
float | 4 | 1.17549435E-38 到 3.40282347E+38 | -3.40282347E+38 到 -1.17549435E-38 | 单精度 | 对精度要求不高,需要快速计算。 |
double | 8 | 2.22507386E-308 到 1.79769313E+308 |
| 双精度 | 需要更高精度(金融运算、科学运算) |
decimal | (M,D) | 取决于M和D | 取决于M和D | 金融型 | 需要精确运算(货币、金融) |
注意:
在 MySQL 中,DECIMAL(M, D)
是一种定点数类型,用于存储精确的小数值。其中,M
和 D
的含义如下:
M
(Precision,精度)
-
含义:
M
表示数字的总长度,即整数部分和小数部分的总位数(不包括小数点)。 -
范围:
M
的取值范围是 1 到 65。
D
(Scale,小数点后的位数)
-
含义:
D
表示小数部分的位数。 -
范围:
D
的取值范围是 0 到 30,且必须小于或等于M
。
示例:DECIMAL(10, 2)
在 DECIMAL(10, 2)
中:
-
10
是M
:表示数字的总长度为 10 位。 -
2
是D
:表示小数部分有 2 位。
因此,DECIMAL(10, 2)
可以存储的最大值是 99999999.99(整数部分 8 位,小数部分 2 位)。
三、字符型数据类型
名称 | 范围(字节) | 类型 | 适用场景 |
char | 1-255 | 定长 | 存储固定长度的字符串(如电话、身份证) |
varchar | 1-65535 | 变长 | 存储长度不固定的字符串(如地址、用户名) |
text | 1-65535 | 变长 | 存储较长的文本数据(如文章、评论) |
注意:
1)当数据为CHAR(M)类型时,不管插入值的长度是实际是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1。
插入值 | CHAR(3) | 存储需求 | VARCHAR(3) | 存储需求 |
---|---|---|---|---|
‘’ | ‘’ | 3个字节 | ‘’ | 1个字节 |
‘a’ | ‘a’ | 3个字节 | ‘a’ | 2个字节 |
‘ab’ | ‘ab’ | 3个字节 | ‘ab’ | 3个字节 |
‘abc’ | ‘ab’ | 3个字节 | ‘abc’ | 4个字节 |
‘abcd’ | ‘ab’ | 3个字节 | ‘abc’ | 4字节 |
如char(20),若只存储了10个字符,则在数据库文件有效字符后有10个空白位,若要存储超过20个字符的数据,则会抛出异常。
char比varchar的性能要好一点,因为char类型在获取数据时不需要关心存储字符的个数,而varchar要先计算存储字符的个数。
2)varchar的最大长度受多方影响。varchar最大可存储65535个字节,首位不存储数据,还需要两个字节存储字符的个数,故真实个数为65535-3;varchar还受编码集的影响,如utfmb3=65532/3,utfmb8=65532/4;还受行长度的影响,表中所有列的总长度不能超过65535。
3)不同地区的字符所占字节数
地区 | 字节数 |
欧洲、拉丁语 | 1 |
中东国家 | 2 |
东南亚、部分南美洲国家 | 3 |
网络表情文字 | 4 |
四、日期型数据类型
注意:0时间是1970年1月1日 0:0:0