本文导读
- MySQL提供了多种数据类型,包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制类型。
整数类型
- 整数类型根据数值取值范围不同,可以分为五种,分别为 tinyint、smallint、mediumint、int 和 bigint。
类型对比表
类型 | 占用字节 | 无符号范围 | 有符号范围 | 数据库长度 |
tinyint | 1 | 0-255 | -128-127 | 4 |
smallint | 2 | 0-65535 | -32768~32767 | 6 |
mediumint | 3 | 0~16777215 | -8388608~8388607 | 9 |
int | 4 | 0~4294967295 | -2147483648~2147483647 | 11 |
bigint | 8 | 0~18446744073709551615 | -9223372036854755808~9223372036854775807 | 20 |
浮点数类型
- 浮点数类型分为以下几种
类型对比表
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
float |
4 字节 | (-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) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
double |
8 字节 | (-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 |
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
- float 数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float 和 double 都是浮点型,而decimal 是定点型;
- MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
- FLOAT 和 DOUBLE 在不指 定精度时,默认会按照实际的精度来显示,而 DECIMAL 在不指定精度时,默认整数为10,小数为0。
格式:float(m,d),如 float(6,2) 表示浮点数一共6位,小数点后面两位,小数点前面四位,如 1234.56
使用举例
- 1)新建 test 表,即三个字段 f、d、de 的长度为6,小数点前最多4位,小数点最多2位
-- 新建 test 表
CREATE TABLE test(
f FLOAT(6,2) DEFAULT NULL,
d DOUBLE(6,2) DEFAULT NULL,
de DECIMAL(6,2) DEFAULT NULL
);
- 2)插入数据一,小数点前后都无越界
-- 插入数据
INSERT INTO test(f,d,de) VALUES(8866.55,8866.55,8866.55);
-- 查询test表所有数据
SELECT * from test;
- 总长度都没有超过6位,小数点都没有超过2位,数据插入都正确
- 3)插入数据二,小数点后长度越界
-- 插入数据二
INSERT INTO test(f,d,de) VALUES(8866.545,8866.545,8866.666);
-- 查询test表所有数据
SELECT * from test;
- float 与 double、decimal 类型的小数点都超过了约定的 2 位,都进行四舍五入插入
- 4)插入数据三,小数点前长度越界
-- 插入数据四
INSERT INTO test(f,d,de) VALUES(88666.55,88686.55,88686.66);
INSERT INTO test(f,d,de) VALUES(88666.5,88686.5,88686.6);
-- 查询test表所有数据
SELECT * from test;
- 5)去掉 f 、d、de 的标度和精度
ALTER TABLE test MODIFY f FLOAT;
ALTER TABLE test MODIFY d DOUBLE;
ALTER TABLE test MODIFY de DECIMAL;
DELETE FROM test;
DESC test;
-- 插入数据
INSERT INTO test(f,d,de) VALUES(5678.55,5678.55,5678.55);
-- 查询test表所有数据
SELECT * from test;
- f 和 d 数据正确插入, de 被四舍五入取整。
- 浮点数不写精度和标度,则会按照实际显示,如果有精度和标度,则会将数据四舍五入后插入
- 定点数如果不设置精度和标度,刚按照默认的(10,0)进行操作