赞
踩
点击关注,我们共同每天进步一点点!
整数类型包含TINYINT、SMALLINT、MEDIUMINT、INT BIGINT等
m为其显示宽度,在为字段设置 zerofill约束条件时有效,否则将不会填充满整个显示宽度。
unsigned:使用无符号存储
zerofill:显示宽度不够时使用0进行填充
使用一切数值类型时,指定其宽度均是为其指定显示宽度,并非存入的限制宽度。
以下示例将演示为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: 0mysql> select * from temp;+---------+| num |+---------+| 00001 | # 当显示宽度不够时使用0进行填充| 9999999 | # 由于指定的宽度是显示宽度,故该数值也能存入,这与存储宽度无关+---------+2 rows in set (0.00 sec)
当范围超出默认值时,将会按照最大值或最小值进行存入。
以下示例将演示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+------+
浮点类型包括FLOAT、DOUBLE、DECIMAL
m为其整数部分显示个数,n为其小数部分显示个数。
DECIMAL底层由字符串进行存储,故精度不会出现偏差,也被称为定点类型。
根据不同的需求,应当使用不同的浮点类型进行存储,一般来说使用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)
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); # 插入记录,1Query 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字段的显示宽度为5Query OK, 1 row affected (0.06 sec)Records: 1 Duplicates: 0 Warnings: 0mysql> insert into temp values(8); # 插入记录,8Query 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
喜欢请关注,有用请转发~
升职、加薪、无漏测-点“在看”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。