SQL 数值类型

数值分为两类

  • 整数
  • 小数

整数类型概述

SQL 的整数类型有5种

有符号就是 正负数都可以存储无符号只能存正数,需要 unsigned 修饰。

  • Tinyint占位 1 字节
    • 有符号:-128~127
    • 无符号: 0~255
  • Smallint占位 2 字节
    • 有符号:-32768~32767
    • 无符号: 0~65535
  • Mediumint占位 3 字节
    • 有符号:-8388608~8388607
    • 无符号: 0~1677215
  • Int占位 4 字节
    • 有符号:- 2147483648~2147483647
    • 无符号:0~4294967295
  • Bigint占位 8 字节
    • 有符号:-9223372036854775808~9223372036854775807
    • 无符号: 0~9223372036854775807*2+1

使用

只用 int 举个例子,其他也是同理。

创建表

create table t (
    t1 int,  # 默认有符号
    t2 int unsigned, # 无符号 不能插入负数
    t3 int(4),  
    /*
     数值代表 查询结果显示的长度(不是范围,范围是 int bigdata 使用什么类型确定的),这样单独写是看不出效果的。
    */
    t4 int(4) unsigned zerofill
    /*
    1. 需要转换成 无符号 添加不足长度 0填充(zerofill)来显示。
    2. 如果使用某些软件查询,查询结果可能会把 填充的0 去掉。
    */
)

插入数据

insert into t values(-1,1,1,1)

查询

有填充的 0 。

mysql> select * from t;
+------+------+------+------+
| t1   | t2   | t3   | t4   |
+------+------+------+------+
|   -1 |    1 |    1 | 0001 |
+------+------+------+------+
1 row in set (0.00 sec)

小数类型概述

SQL 的小数类型可以分为两大类

小数型,常用于计算,浮点的运算在精度上要求不高(了解)。

  • float(M, D):占有 4 字节
    • 范围:±1.75494351E-38~±3.402823466E+38
  • double(M, D):占有 8字节
    • 范围:±2.2250738585072014E-308~
      ±1.7976931348623157E+308

定点型,常用于货币的计算

dec(M, D) 是 decimal(M, D) 的缩写。

  • dec(M, D):占有 M + 2 个字节
    • 范围:最大取值范围与double相同,给定dec的有效取值范围由M和D
      决定

特点

M & D 详解

  1. M & D 的作用
    • M:整数位数 + D
    • D:小数的位数
  2. M & D 都是可以省略
    • 小数类型省略,就不受位数限制
    • 定点数省略,将会默认 dec(10,0)

使用

创建表

create table num.f (
  f1 float, # 不带参数
  f2 float(5,2), # 带参数,超过范围会报错
  f3 dec, # 不带参数默认 dec(10,0)
  f4 dec(5,4) # 达不到 5 长度,小数后 0 填充
)

查看表的结构

关注表字段的 Type 。

mysql> desc f;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| f1    | float         | YES  |     | NULL    |       |
| f2    | float(5,2)    | YES  |     | NULL    |       |
| f3    | decimal(10,0) | YES  |     | NULL    |       |
| f4    | decimal(5,4)  | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

插入数据

insert into f values(-1,1.56,1,1.56)

查看结果

dec 类型填充的 0 ,在某些软件查询会被过滤。

mysql> select * from f;
+------+------+------+--------+
| f1   | f2   | f3   | f4     |
+------+------+------+--------+
|   -1 | 1.56 |   -1 | 1.5600 |
+------+------+------+--------+
2 rows in set (0.00 sec)
发表评论 / Comment

用心评论~