MySQL 整数类型 与 浮点数类型

本文导读

  • 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)进行操作

猜你喜欢

转载自blog.csdn.net/wangmx1993328/article/details/81501564