27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
知识点:
(1)MySQL中的数据类型是强类型
(2)MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。
(3)数据类型选择的范围尽可能小,范围越小占用资源越少
(4)无符号整数是整数的两倍
(5)MySQL 支持多种类型,大致可以分为三类:
1.数值(整数型 浮点数 定点数)
2.日期/时间
3.字符串(字符)类型。
数值-整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
数值-浮点数类型:FLOAT、DOUBLE
数值-定点数型:DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型:Date、DateTime、TimeStamp、Time、Year
还有一些其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
此篇文章主要介绍数值型:
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
整型 | ||||
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,223,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的值 | 小数值 |
整型中int和integer的区别是什么?
官方给出的解释:
The keyword INT is a synonym for INTEGER //它们是同义词,没有区别
官方弄2个可能是为了照顾习惯用interger的人吧,因为在有些语言是不同的,如java
选择的范围尽可能小,范围越小占用资源越少
mysql> create table stu1( -> id tinyint, # 范围要尽可能小,范围越小,占用空间越少 -> name varchar(20) -> ); Query OK, 0 rows affected (0.02 sec) -- 超出范围会报错 mysql> insert into stu1 values (128,'tom'); ERROR 1264 (22003): Out of range value for column 'id' at row 1
无符号整形就是没有负数,无符号整数是整数的两倍
mysql> create table stu2( -> id tinyint unsigned # 无符号整数 -> ); Query OK, 0 rows affected (0.02 sec) mysql> insert into stu2 values (128); Query OK, 1 row affected (0.00 sec)
显示宽带是最小的显示位数,如int(11)表示整形最少用11位表示,如果不够位数用0填充。显示宽度默认不起作用,必须结合zerofill才起作用。
mysql> create table stu4( -> id int(5), -> num int(5) zerofill # 添加前导0,int(5)显示宽带是5 -> ); Query OK, 0 rows affected (0.05 sec) mysql> insert into stu4 values (12,12); Query OK, 1 row affected (0.00 sec) mysql> select * from stu4; +------+-------+ | id | num | +------+-------+ | 12 | 00012 | +------+-------+ 1 row in set (0.00 sec)
浮点型的声明语法
float(M,D) double(M,D) M:总位数 D:小数位数
浮点型数值注意事项:
浮点数有单精度和双精度
浮点数支持科学计数法
浮点数精度会丢失
浮点型案例1:
mysql> create table stu5( -> num1 float(5,2), -- 浮点数 -> num2 double(6,1) -- 双精度数 -> ); Query OK, 0 rows affected (0.05 sec) mysql> insert into stu5 values (3.1415,12.96); Query OK, 1 row affected (0.00 sec) mysql> select * from stu5; +------+------+ | num1 | num2 | +------+------+ | 3.14 | 13.0 | +------+------+ 1 row in set (0.00 sec)
浮点型案例2:MySQL浮点数支持科学计数法
mysql> create table stu6( -> num float # 不指定位数,默认是小数点后面6位 double默认是17位 -> ); Query OK, 0 rows affected (0.03 sec) mysql> insert into stu6 values (5E2),(6E-2); # 插入科学计数法 Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from stu6; +------+ | num | +------+ | 500 | | 0.06 | +------+ 2 rows in set (0.00 sec)
浮点型案例3:浮点数精度会丢失问题
mysql> insert into stu6 values(99.999999999); Query OK, 1 row affected (0.00 sec) mysql> select * from stu6; +------+ | num | +------+ | 100 | +------+
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
原理:将整数部分和小数部分分开存储
注意点:
1、decimal是变长的,大致是每9个数字用4个字节存储,整数和小数分开计算。M最大是65,D最大是30,默认是(10,2)。
2、定点和浮点都支持无符号、显示宽度0填充。
语法:
decimal(M,D) M:总位数 D:小数位数
小数型案例
mysql> create table stu8( -> num decimal(20,9) # 存放定点数 -> ); Query OK, 0 rows affected (0.00 sec) mysql> insert into stu8 values(12.999999999); Query OK, 1 row affected (0.00 sec) mysql> select * from stu8; +--------------+ | num | +--------------+ | 12.999999999 | +--------------+ 1 row in set (0.00 sec)
本站内容均为小米原创,转载请注明出处:小米技术社区>> mysql数据类型之数值型,包括整型、浮点型和小数型