合适的数据类型可以提高数据库存储空间利用率,一定程度上提高数据查询效率.
1.整形
类型 | 大小 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
TINYINT | 1 byte | (-128,127) | (0,255) |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607)8百万 | (0,16 777 215) |
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647)21亿 | (0,4 294 967 295) |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) |
使用:
CREATE TABLE test(id INT,num TINYINT UNSIGNED)
2.浮点型
浮点数并不一定等于小数,浮点数是相对于定点数来说的,因为浮点数的存储机制,导致其精度较低,但表示的范围很广。使用时需要注意有效位数
定点数DECIMAL
在定点数中,小数点的位置是固定的。一般用来存储精确度要求比较高的数字,例如:钱数
浮点数
浮点数由符号位、阶码、尾数组成。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 有效位数为7 | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | M位数字 | 依赖于M和D的值,M 范围为1〜65 ,D 的范围是0 ~30 。mysql中要求 D<= M | 依赖于M和D的值 | 小数值 |
3.字符串
选择合适长度的类型可以减少磁盘IO.提高效率
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
在utf8中每个字使用3个bytes存储
utf8mb64中使用4个bytes进行存储
不常用的包括:
char可以改变大小例:char(20)
如果列中的值不够20位,则会自动用空格补全.特点:浪费空间、读取速度
varchar :可以指定最大存储空间,实际添加数据的过程中,占用的大小会根据数据的长度确定.同时会预留1-2个字节
text: 数据占用空间不可以指定.在mysql中实际指挥存储前768字节在数据页中,剩下的会存储在数据表之外的地方.不会因为数据过多导致的数据表变大
4.枚举 集合
enum 枚举: 从列出来的数据当中选一个(性别)
set 集合: 从列出来的数据当中选多个(自动去重)
create table t6(
id int,
name varchar(10),
money float(6,3),
sex enum('男性','女性'),
hobby set('读书','跑步','美食')
);
5. 时间
详见另外一篇 mysql必知必会文章的内容