目录
整数类型
MySQL主要提供的整数类型有:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT.整型的字段属性可以添加AUTO_INCREMENT自增约束条件。
MySQL数据类型 | 含义(有符号) |
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度,可使用INT(M)进行设置。其中M指示最大显示宽度。
例如,INT(4)表示最大有限显示为4.
显示宽度的大小与存储大小或类型的包含值的范围无关
虽然定义表的时候未明确指出数据类型的显示宽度,但是系统给每种数据类型添加了不同的默认显示宽度。这些显示宽度能够保证显示每一种数据类型的取值范围内所有的值。
不同整数类型的取值范围不同,所需的存储空间也不同,因此,在定义数据表的时候,要根据实际需求选择最合适的类型,这样做有利于节约存储空间,还有利于提高查询效率。
浮点数类型和定点数类型
浮点类型有两种:单精度浮点类型(float)和双精度浮点类型(double)
定点类型只有一种:decimal
由执行结果可以看出来,虽然字段a,b的float和double数据类型插入超过其精度范围的小数时,MySQL系统未给出警告,但是对插入的数据做了四舍五入的处理。
日期与时间类型
YEAR ,字节数为1,取值范围为“1901——2155”
DATE,字节数为4,取值范围为“1000-01-01——9999-12-31”
TIME,字节数为3,取值范围为“-838:59:59——838:59:59”
DATETIME,字节数为8,取值范围为“1000-01-01 00:00:00——9999-12-31 23:59:59”
TIMESTAMP,字节数为4,取值范围为“19700101080001——20380119111407
1.year
以4位数字格式表示YEAR
由图可知:插入值超过边界值,则会插入失败,但无论是数值型还是字符串型都可以正确插入。
以两位字符格式表示YEAR,让我们来看看::
执行结果可以看出,他们都成功被转化成了年份
那如果用两位数字格式来表示YEAR呢
从结果可以看到,数字0都变转化成了0000,数字89依然是1989,15的值也依然是2015.
2.TIme
time类型用在需要记录的时间信息的值,需要3字节存储。格式为‘HH:MM:SS’
如果插入的是‘D HH:MM:SS’格式,则类似插入了‘(D*24+HH):MM:SS’。比如插入‘2 23:50:50’,相当于插入了‘71:50:50’。
如果插入的是‘HH:MM’或‘SS’格式,则效果是其他未被表示位的值赋为零值。比如插入‘30’,相当于插入了‘00:00:30’;如果插入‘11:25’,相当于插入了‘11:25:00’
直接来使用一下这个代码
TIME类型插入举例
向表中插入‘105508’,‘123456’,‘0’,106508
由于106508超过取值范围,所以没有被插入表内
通过CURRENT_TIME获取系统日期并插入表中
刚好与我们当前系统的时间函数相同,证明获取成功
3.DATE类型
MySQL是以YYYY-MM-DD格式来显示DATE类型的值,插入数据时,数据可以保持这种格式。另外,MySQL还支持一些不严格的语法格式,分隔符“-”可以用“@”、“.”等众多富豪来替代。
在插入数据时,也可以使用“YY-MM-DD”格式,YY转化成对应的年份的规则与YEAR类型类似。
如果我们想插入当前系统的时间,则可以插入CURRENT_DATE或者NOW()。
通过CURRENT_DATE函数获取系统日期并插入表
4. DATETIME
标准格式为“YYYY-MM-DD HH:MM:SS”,具体赋值方法与上面各种类型的方法相似。
直接看例子
不同格式的字符串日期时间数据都能够正确的被插入到数据表中
换一种方式
也能够正确显示
当我们用系统获取时间来对比一下
5.TIMESTAMP
TIMESTAMP的取值范围比较小,没有DATETIME的取值范围大,因此输入值时一定要保证在TIMESTAMP的范围之内。它的插入也与插入其他日期和时间数据类型类似。
那么TIMESTAMP类型如何插入当前时间?第一,可以使用CURRENT_TIMESTAMP;第二,输入NULL,系统自动输入当前的TIMESTAMP;第三,无任何输入,系统自动输入当前的TIMESTAMP。
另外有很特殊的一点:TIMESTAMP的数值是与时区相关。