mysql @符号_MySQL 数值类型

1d14053980e748fa9f677f7d38670e87.gif

点击关注,我们共同每天进步一点点!

1 整数类型

   整数类型包含TINYINT、SMALLINT、MEDIUMINT、INT BIGINT等

1 存取范围

7a752f4bdfd40363586c65aa1746739d.png

m为其显示宽度,在为字段设置 zerofill约束条件时有效,否则将不会填充满整个显示宽度。

2 可选约束

   unsigned:使用无符号存储

   zerofill:显示宽度不够时使用0进行填充

3 显示宽度

   使用一切数值类型时,指定其宽度均是为其指定显示宽度,并非存入的限制宽度。

   以下示例将演示为INT类型设置设置了显示宽度后,当宽度不够时将以指定字符进行填充。

mysql> create table temp (num int(5) unsigned zerofill);  # 创建temp表,显示宽度为5,有num字段,无符号整型,使用0进行宽度填充
Query OK, 0 rows affected (0.03 sec)

mysql> insert into temp (num) values
    ->         (1),
    ->         (9999999);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp;
+---------+
| num     |
+---------+
|   00001 |  # 当显示宽度不够时使用0进行填充
| 9999999 |  # 由于指定的宽度是显示宽度,故该数值也能存入,这与存储宽度无关
+---------+
2 rows in set (0.00 sec)

4 范围超出

   当范围超出默认值时,将会按照最大值或最小值进行存入。

   以下示例将演示TINYINT类型无符号存入-1与256后将会按照0与255进行存储。

MySQL5.7.30版本中这样的操作将会抛出异常
但是在MySQL5.6.X版本中这样的操作是被允许的(非严格模式下)

mysql> create table temp(num tinyint);
mysql> insert into temp(num) values
    -> (-129),
    -> (128);
mysql> select * from temp;
+------+
| temp |
+------+
| -128 | #-129存成了-128
|  127 | #128存成了127
+------+

2 浮点类型

   浮点类型包括FLOAT、DOUBLE、DECIMAL

1 存取范围

4e930f9830e98e2ad9166088ae85f89b.png

m为其整数部分显示个数,n为其小数部分显示个数。
DECIMAL底层由字符串进行存储,故精度不会出现偏差,也被称为定点类型。

2 精度问题

   根据不同的需求,应当使用不同的浮点类型进行存储,一般来说使用FLOAT足以,但是对于一些精度非常高的数据则应该使用DECIMAL类型进行存储。

   以下示例将演示使用不同的浮点类型进行值存储时会发生精度问题。

mysql> create table t1(num float(255,30));  # 指定显示宽度
Query OK, 0 rows affected (0.05 sec)

mysql> create table t2(num double(255,30)); # 指定显示宽度
Query OK, 0 rows affected (0.03 sec)

mysql> create table t3(num decimal(65,30)); # 指定显示宽度
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1(num) values(1.11111111111111111);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t2(num) values(1.11111111111111111);
Query OK, 1 row affected (0.02 sec)

mysql> insert into t3(num) values(1.11111111111111111);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;  # 点后7位以内
+----------------------------------+
| num                              |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t2;  # 点后15位以内
+----------------------------------+
| num                              |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t3;  # 绝对精确
+----------------------------------+
| num                              |
+----------------------------------+
| 1.111111111111111110000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

3 位类型

   BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。

   注意:对于位字段需要使用函数读取

   bin()显示为二进制

   hex()显示为十六进制

mysql> create table temp(num bit);  # 创建temp表,num字段为bit类型
Query OK, 0 rows affected (0.03 sec)

mysql> desc temp; # 默认显示宽度为1
+-------+--------+------+-----+---------+-------+
| Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| num   | bit(1) | YES  |     | NULL    |       |
+-------+--------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into temp(num) values(1);  # 插入记录,1
Query OK, 1 row affected (0.00 sec)

mysql> select * from temp;  # 直接查看是查看不到的
+------+
| num  |
+------+
|     |
+------+
1 row in set (0.00 sec)

mysql> select bin(num),hex(num) from temp;  # 需要转换为二进制或十六进制进行查看
+----------+----------+
| bin(num) | hex(num) |
+----------+----------+
| 1        | 1        |
+----------+----------+
1 row in set (0.00 sec)

mysql> alter table temp modify num bit(5);  # 修改num字段的显示宽度为5
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into temp values(8);  # 插入记录,8
Query OK, 1 row affected (0.02 sec)

mysql> select bin(num),hex(num) from temp; # 显示的是不同的进制
+----------+----------+
| bin(num) | hex(num) |
+----------+----------+
| 1        | 1        |
| 1000     | 8        |
+----------+----------+
2 rows in set (0.00 sec)
原文地址: https://www.cnblogs.com/Yunya-Cnblogs/p/13585109.html b9265c68f99ca005eeeaf8dfd41f0b8f.png cfcffeeb2424a3b49557fd9f6a4dbc13.gif

喜欢请关注,有用请转发~

升职、加薪、无漏测-点“在看”

20b5549bc229533d16e841e762cfbcaf.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值