Mysql 学习 ->数据类型篇(数值类型)
- 数据类型
整数类型 |
字节 |
最小值 |
最大值 |
TINYINT | 1 |
有符号-128 无符号0 |
有符号 127 无符号 255 |
SMALLINT | 2 |
有符号-32768 无符号0 |
有符号32767 无符号65535 |
MEDIUMINT | 3 |
有符号 -8388608 无符号 0 |
有符号 8388608 无符号1677215 |
INT | 4 |
有符号-2147483648 无符号0 |
有符号2147483647 无符号4294967295 |
BINGINT | 8 |
有符号 -9223372036854775808 无符号 0 |
有符号9223372036854775807 无符号18446744073709551615 |
浮点数类型 |
字节 |
最小追 |
最大值 |
FLOAT | 4 |
-+1.175494351E-38 |
-+3.402823466E+38 |
DOUBLE | 8 |
-+2.2250738585072014E-308 |
-+1.7976931348623157E+308 |
定点数类型 |
字节 |
描述 |
|
DECIMAL(M,D) | M+2 |
最大取值范围与DOUBLE相同,给定DECIMAL的有效值范围由M和D决定
|
|
位类型 |
字节 |
最小值 |
最大值 |
BIT(M) | 1~8 |
BIT(1) |
BIT(64) |
对于整数类型,Mysql支持类型名臣后面的小括号内指定显示宽度,例如int(5),当数值宽度小于5位的时候在数字前面填满宽度,一般配合zerofill使用。
(zerofill就是 ‘0’填充的意思,在数字位数不够的空间用字符0填满)。
如果插入的值大于宽度限制会不会报错?
答:不会对插入的数据有任何影响,还是会按照类型的实际精度进行保存,所有的整数类型都有一个可选属性UNSIGNED(无符号),如果要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,他的取值范围下限取0,上限取原值的2倍。
另外,整数类型还有一个属性,AUTO_INCREMENT(自动增长),在需要产生唯一标识或顺序时,可用这个属性,只作用于整数类型,值一般从1开始,通常用在主键(PRIMARY KEY)上
注:mysql中数值类型基本就是这些,在选择数据类型的时候要根据应用时机发生的情况确定其取值范围,最后根据确定的结果慎重选择数据类型。
对于小数的表示,Mysql分为定点型和浮点型:
浮点型包括float(单精度)和double(双精度),而定点数则只有decimal一种表示,定点数在Mysql内部以字符串的形式存放,比浮点数更精确,适用于货币等精度高的数据
float,double,decimal三者之间的区别?
创建一张表分别定义
分别往id1,id2,id3中插入 1.23
在向id1,id2字段插入1.234,而id3中仍然插入1.23
可以看出,其中id1和id2由于标度的限制,舍去了最后一位,数据变成1.23
接着同时向id1,id2,id3字段中插入数据1.234
此时发现,数据都插入进去了,但是报了一个warning错误,id3这个记录是不能插入的,跟数据校检有关,涉及到sql mode的知识,之后在讲
将表中的精度和标度都去掉,这次插入1.234
插入数据
可以发现,id1和id2字段可以正常插入数据,id3小数位被截断了,所以可以看出,浮点数如果不写精度和标度,则会按实际情况显示值,如果有精度和标度,则会四舍五入
定点数如果不写精度和标度,则会按系统默认值decimal(10,0)来进行操作,如果数超过精度和标度会报错
对于BIT类型,用于存放位字段值,BIT(M)可以存放多为二进制数,M范围1~64,如果不写则默认1,对于位字段,直接使用select命令不会看到结果,可以用bin()(显示二进制格式)或者hex()(显示十六进制格式)函数进行读取
用bin()和hex()函数: