数据库开发——MySQL——数据类型——数值类型

MySQL中定义数据字段的类型对数据库的优化是非常重要的。

MySQL支持多种类型,大致可以分为四类:数值、日期/时间、字符串(字符)类型、枚举类型与集合类型。

一、数值类型

MySQL支持所有标准SQL数值数据类型。

类型 大小(字节) 范围(有符号) 范围(无符号) 用途
TINYINT 1 (-128,127) (0,255) 小整数值
SMALLINT 2 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
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的值 小数值

1.整数类型

tinyint[(m)] [unsigned] [zerofill]

小整数,数据类型用于保存一些范围的整数数值范围:
有符号(默认为有符号):
    -128 ~ 127
无符号:
    0 ~ 255

PS: MySQL中无布尔值,使用tinyint(1)构造。

创建有符号tinyint表

create table t1(x tinyint);
desc t1;

在这里插入图片描述
尝试插入值

insert into t1 values(-129);
insert into t1 values(-128);
insert into t1 values(127);
insert into t1 values(128);

在这里插入图片描述

查看表中数据

select * from t1;

在这里插入图片描述
创建无符号tinyint表

create table t2(x tinyint unsigned);

在这里插入图片描述
尝试插入值

insert into t2 values(-1);
insert into t2 values(0);
insert into t2 values(255);
insert into t2 values(256);

在这里插入图片描述
查看表中数据

select * from t2;

在这里插入图片描述

int[(m)][unsigned][zerofill]

整数,数据类型用于保存一些范围的整数数值范围:
有符号(默认为有符号):
      -2147483648 ~ 2147483647
无符号:
      0 ~ 4294967295

创建无符号int表

create table t3(x int);

在这里插入图片描述

尝试插入值

insert into t3 values(-2147483649);
insert into t3 values(-2147483648);
insert into t3 values(2147483647);
insert into t3 values(2147483648);

在这里插入图片描述

查看表中数据

select * from t3;

在这里插入图片描述

创建有符号int表

create table t4(x int unsigned);

在这里插入图片描述

尝试插入值

insert into t4 values(-1);
insert into t4 values(0);
insert into t4 values(4294967295);
insert into t4 values(4294967296);

在这里插入图片描述
查看表中数据

select * from t4;

在这里插入图片描述

bigint[(m)][unsigned][zerofill]

大整数,数据类型用于保存一些范围的整数数值范围:
有符号:
        -9223372036854775808 ~ 9223372036854775807
无符号:
        0  ~  18446744073709551615

创建无符号bigint表

create table t5(x bigint);

在这里插入图片描述

尝试插入值

insert into t5 values(-9223372036854775809);
insert into t5 values(-9223372036854775808);
insert into t5 values(9223372036854775807);
insert into t5 values(9223372036854775808);

在这里插入图片描述
查看表中数据

select * from t5;

在这里插入图片描述
创建有符号bigint表

create table t6(x bigint unsigned);

在这里插入图片描述
尝试插入值

insert into t6 values(-1);
insert into t6 values(0);
insert into t6 values(18446744073709551615);
insert into t6 values(18446744073709551616);

在这里插入图片描述
查看表中数据

select * from t6;

在这里插入图片描述

2.浮点型

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

定义:
        单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30

有符号:
           -3.402823466E+38 to -1.175494351E-38,
           1.175494351E-38 to 3.402823466E+38
无符号:
           1.175494351E-38 to 3.402823466E+38


精确度: 
           **** 随着小数的增多,精度变得不准确 ****
           .

创建有符号float表

create table t7(x float(255,30));

尝试插入π小数点后70位

insert into t7 values(3.1415926535897932384626433832795028841971693993751058209749445923078164);

查看表中数据

select * from t7;

在这里插入图片描述
随着小数的增多,精度开始不准确

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

定义:
           双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30

有符号:
           -1.7976931348623157E+308 to -2.2250738585072014E-308
           2.2250738585072014E-308 to 1.7976931348623157E+308

无符号:
           2.2250738585072014E-308 to 1.7976931348623157E+308

精确度:
           ****随着小数的增多,精度比float要高,但也会变得不准确 ****

创建有符号double表

create table t8(x double(255,30));

尝试插入π小数点后70位

insert into t8 values(3.1415926535897932384626433832795028841971693993751058209749445923078164);

查看表中数据

select * from t8;

在这里插入图片描述
精度比float要准确点,但随着小数的增多,同样变得不准确

decimal[(m[,d])] [unsigned] [zerofill]

定义:
          准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。


精确度:
           **** 随着小数的增多,精度始终准确 ****
           对于精确数值计算时需要用此类型
           decaimal能够存储精确值的原因在于其内部按照字符串存储。

创建有符号decimal表

create table t9(x decimal(65,30));

尝试插入π小数点后70位

insert into t9 values(3.1415926535897932384626433832795028841971693993751058209749445923078164);

查看表中数据

select * from t9;

在这里插入图片描述
精度始终准确,d为30,于是只留了30位小数

用zerofill测试整数类型的显示宽度

注意:为该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关。

完全没必要为整数类型指定显示宽度,使用默认的就可以了。

默认的显示宽度,都是在最大值的基础上加1。

创建指定zerofill的有符号int表

create table t10(x int(5) zerofill);

尝试插入不同长度的数值

insert into t10 values
    (1),
    (11),
    (111),
    (1111),
    (11111),
    (111111),
    (1111111),
    (11111111);

查看表中数据

select * from t10;

在这里插入图片描述

原文地址:https://www.cnblogs.com/AlexKing007/p/12337990.html