MySQL中age字段的字段类型_MySQL(⼆)数据库数据类型
详解
序⾔
今天去健⾝了,感觉把⾝体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这⾥讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了。但是通过今天的学习,已经解惑了。下⾯就跟着我的节奏去把这个拿下吧。
---WH
⼀、数据类型
MySQL的数据类型有⼤概可以分为5种,分别是 整数类型、浮点数类型和定点数类型、⽇期和时间类型、字符串类型、⼆进制类型。现在可以来看看你对这5种类型的熟悉程度,哪个看起来懵逼了,那就说明⾃⼰哪个不熟悉,不理解。
注意:整数类型和浮点数类型可以统称为数值数据类型,这不难理解。
数值数据类型
整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
浮点数类型:FLOAT、DOUBLE
定点⼩数:DECIMAL
⽇期/时间类型
YEAR、TIME、DATE、DATETIME、TIMESTAMP
字符串类型
CHAR、VARCHAR、TEXT、ENUM、SET等
⼆进制类型
BIT、BINARY、VARBINARY、BLOB
1、整数类型
不管你学什么语⾔,在基础⽅⾯,都应该知道 1个字节= 8位⼆进制数。 每个类型的取值范围也就能够知道,⽐如 TINYINT占⽤1个字节,也就是8位,2的8次⽅减1等于255,也就是说如果代表没符号的整数,该取值范围为0~255,如果是有符号的,最⾼位为符号号位,也就是2的7次⽅减1,也就是127,取值范围为-128~127, 为什么需要减1,这个问题就需要考虑临界值的问题了。⽽考虑临界值问题⼜有需要讨论原码补码反码的知识,这些度不是我们讨论的重点,所以在这就⾃⾏百度。给出⼀张范围表,给⼤家做参考。
不同整数类型的取值范围
根据⾃⼰所需去选取不同的类型名称,
例如:
CREATE TABLE aaa(
id INT(10) PRIMARY KEY,
age INT(6)
);
这个例⼦中INT(10)、INT(6) 括号中的数字表⽰的是该数据类型指定的显⽰宽度,指定能够显⽰的数值中数字的个数。这⾥要注意:显⽰宽度和数据类型的取值范围是⽆关的,显⽰宽度只是指明MySQL最⼤可能显⽰的数字个数,注意是可能。通俗点讲就是,⽐如这个age字段,显⽰宽度为6,但是如果你插⼊的数据⼤于6,达到了8,6666 6666,那也没关系,只要插⼊的数值的位数不超过该类型整数的取值范围,就⾏,如果插⼊的数值长度是4,或者3,数值的位数⼩于指定的宽度,后⾯的位数就会由空格填空,5555插⼊age字段,存的就是"5555 "后⾯⽤空格补齐。还有⼀点,这个显⽰宽度没限制,你写100度没问题,但是插⼊数据时,实际起控制作⽤的还是数据类型的取值范围。如果不写显⽰宽度,就会⽤系统默认的,⽐如,INT的默认显⽰宽度是11,看上⾯表,最⾼也就能表⽰10位⼤⼩的数值,但是要注意,有符号的,也就是负数时,符号位也占⼀位。
2、浮点数类型和定点数类型
2.1解释M,D的意思:
M:数值的总位数。 通俗点讲,就是看有多少个数字,⽐如,5.6789,M就是5
D:⼩数点后⾯能保留⼏位。 ⽐如上⾯的5.6789 ,D就是4。 这只是举⼀个例⼦,来说明M,D是什么,实际是先有M,D的,然后在来控制数值,⽽不是更具数值来确定M,D。
不单单就MECIMAL有M,D这两个参数,FLOAT 和 DOUBLE 度有,看下⾯例⼦varchar2最大长度
⽐如:
CREATE TABLE tmp(
x FLOAT(3,1),
y DOUBLE(5,3),
z DECIMAL(5,4)
);
假设x插⼊的值为:5.69,56.78,5.438,349.2 (注意:实验给x这个字段插⼊的值,可能实验了三次,不要错看成x的值为5.69,y为56.78等等了)
实际上在数据库中存的值为:5.7,56.9,5.3,349.2这个报错
分析:x的M为3,D为1,那么⼩数点上必须是占了⼀位数字,就算没有值,也会⽤0来填充,所以说,整数位上最多就只能是2位,这⾥要切记要先根据D的值,来算整数位能最多有多少位。
通过分析x,y和z也就简单了,
y字段上的值,整数部分最多是2位,⼩数点后的位数最多是3位,也就是说⼩数点后超过了3位,就会四舍五⼊。
z字段上的值,整数部分最多只能是⼀位,⼩数点后的位数最多是4位,如果不⾜4位,也会⽤0补充。⽐如插⼊1.56,在数据库中存的就是1.5600, ⽐如插⼊25.46,这个就会报错,因为整数部分只能是⼀位,⼩数点后的位数已经占了4位了。这⾥要搞清楚。
2.2、FLOAT、DOUBLE、DECIMAL三者的区别。
都是⽤来表⽰我们所说的⼩数的也就是浮点数,但是三种的精度不⼀样,也就是后⾯显⽰的位数不⼀样,
区别⼀:
FLOAT显⽰后⾯的⼩数点位⼤概在40多位,
DOUBLE能显⽰的就是300多位了,不是⼀个层次上的,
DECIMAL这个⼩数点后⾯能显⽰的位数跟DOUBLE差不多,
区别⼆:
FLOAT和DOUBLE在不指定精度时,也就是不⽤(M,D),默认会按照实际的精度,也就是你写多少就是多少,⽽DECIMAL如不指定精度默认为(10,0),也就是如果不指定精度,插⼊数值56.89,在数据库中存储的就是57。所以⼀般使⽤DECIMAL时就会指定精度,⽽使⽤FLOAT和DOUBLE就不⽤。
区别三:
浮点数相对与定点数(DECIMAL)的优点就是在长度⼀定的情况下,浮点数能够表⽰更⼤的数据范围,但是缺点是会引起精度问题。
2.3、什么时候使⽤FLOAT、DOUBLE、DECIMAL
对精度要求⽐较⾼的时候,⽐如货币、科学数据等,使⽤DECIMAL的类型⽐较好。其他的时候,看你要存放的数据的⼤⼩⽽定了,⼀般使⽤DOUBLE。并且在使⽤浮点数时需要注意,尽量避免做浮点数的⽐较,⽐如加、减,谁⼤谁⼩,这样的操作,会引起精度缺失。相信在⼀些程序语⾔中,遇到过float精度丢失的问题。
3、⽇期与时间类型
现在有些东西看不懂没关系,⼤概有个了解先,接下来⼀⼀进⾏讲解。
3.1、YEAR
3.1.1、重点看他的存储范围,1901~2155. 在插⼊该数值时,有两种⽅式,⼀种是⽤字符串来代表插⼊的YEAR值,另⼀种是⽤数字代表YEAR值,其中字符串插⼊的可以⽤单引号和双引号,没区别,跟⼀些程序设计语⾔不⼀样,单个字符就必须⽤单引号,多字符就要⽤双引号,在MySQL中,单双引号度表⽰字符。
例⼦:
CREATE TABLE tmp(
y YEAR
);
向表中插⼊数据:INSERT INTO tmp VALUES(2010),('2010'),("2010");
查询表中数据:SELECT * FROM tmp;
能查看三条记录度插⼊到数据库tmp表中了。注意:这⾥插⼊数据和查询数据操作还没学过,如果不知道,可以暂时跳过,直接看结论。
如果向表中插⼊超出范围的值,2166则会报错
3.1.2、在插⼊完整年份时,⽤字符串和⽤数字代表YEAR值的效果是⼀样的,但是当省略YEAR值时,⽤这两种⽅式就不⼀样了。
例⼦⼀:就拿上⾯那张tmp表来说。向表中插⼊⽤字符串代表的YEAR值,'’0' 、'00'、 '77'、 '10'
删除表中数据:DELETE FROM tmp;
向表中插⼊数据:INSERT INTO tmp VALUES('0'),('00'),('77'),('10');
结果:
插⼊的字符'0'、'00'变成了2000
插⼊的字符'77'变成了1977
插⼊的字符'10'变成了2010
例⼦⼆:向tmp表中y字段插⼊2位数字表⽰YEAR值,0,00,78,11
删除表中数据:DELETE FROM tmp;
向表中插⼊数据:INSERT INTO tmp VALUES(0),(00),(77),(11);
结果:
插⼊的数字0、00变成了0000
插⼊的数字77变成了1977
插⼊的数字11变成了2011
结论:在省略写年份时,
1、⽤字符表⽰和⽤数字表⽰的区别就在于0。如果是字符0或字符00,则在数据库中会⽣成2000,如果是数字0或00,则会⽣成0000.
2、在不超过70,也就是⼩于70,度会⽣成2000年以上,也就是如果是69,则⽣成2069.如果是70以上包含70,就会变成1970以上。⽐如70,就会变为1970。也就是00-69范围的年值转换为2000~2069. 70-99范围的年值转换为1970~1999
3、⼀般我们如果要使⽤,也就⽤全称,这样不容易混淆,但是得知道有这些特性
3.2、TIME
格式:HH:MM:SS HH表⽰⼩时 、MM表⽰分钟、SS表⽰秒
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论