黑马程序员技术交流社区

标题: 【杭州中心】关于MySQL,你了解多少?_数据类型-技术扩展 [打印本页]

作者: 小江哥    时间: 2018-1-14 11:09
标题: 【杭州中心】关于MySQL,你了解多少?_数据类型-技术扩展
本帖最后由 小江哥 于 2018-1-14 11:16 编辑

MySQL支持的数据类型数值类型[td]
整数类型字节最小值最大值
TINYINT1有符号-128 /无符号0有符号127 /无符号255
SMALLINT2有符号-32768 /无符号0有符号32767 /无符号65535
MEDIUMINT3有符号-8388608 /无符号0有符号8388607 /无符号1677215
INT、INTEGER4有符号-2147483648 /无符号0有符号2147483647 /无符号4294967295
BIGINT8有符号-9223372036854775808 /无符号0有符号9223372036854775807 /无符号18446744073709551615
[td]
浮点数类型字节最小值最大值
FLOAT4±1.175494351E-38±3.402823466E+38
DOUBLE8±2.2250738585072014E-308±1.7976931348623157E+308
[td]
定点数类型字节描述
DEC(M,D) /DECIMAL(M,D)M+2最大取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定
[td]
位类型字节最小值最大值
BIT(M)1~8BIT(1)BIT(64)
  **注意:**INT是INTEGER的同名词,DEC是DECIMAL的同名词
关于整数的可选属性:UNSIGNED:如果需要在字段里面保存非负数或者较大的上限值时,可以用此选项,它的取值范围是正常值的下限取0,上限值取原上限值的2倍
AUTO_INCREMENT:在需要产生唯一标识符或顺序值时,可用此属性,AUTO_INCREMENT从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列中当前最大值大1的值。一个表中只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMAERY KEY或定义为UNIQUE键,例如,可按下列任何一种方式定义AUTO_INCREMENT列:
create table ai(id int not null auto_increment primary key);create table ai(id int not null auto_increment, primary key(id));create table ai(id int not null auto_increment, unique(id));关于小数的表示:例如,定义float(7,4)的一个列可以显示为-999.9999,MySQL保存值时进行四舍五入,因此,如果在float(7,4)列内插入999.00009,近似结果为999.0001。值得注意的是,浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用,float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而decimal在不指定精度时,默认的整位为10,默认的小数位为0。
日期时间类型日期和时间类型[td]
日期和时间类型字节最小值最大值
DATE41000-01-019999-12-31
DATETIME81000-01-01 00:00:009999-12-31 23:59:59
TIMESTAMP4197001010800012038年的某个时刻
TIME3-838:59:59838:59:59
YEAR119012155
日期和时间类型的零值表示[td]
数据类型零值表示
DATE0000-00-00
DATETIME0000-00-00 00:00:00
TIMESTAMP00000000000000
TIME00:00:00
YEAR0000
  注意:每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的SQLMode下,系统会进行错误提示,并将以零值来进行存储。
DATE、TIME、DATETIME是最常用的3种日期类型,TIMESTAMP和DATETIME的表示方法非常类似,区别主要有以下几点:
函数返回的结果,其值适合DATETIME、DATE或TIMESTAMP,例如NOW()或CURRENT_DATE。
字符串类型常规字符串类型[td]
字符串类型字节描述及存储需求
CHAR(M)MM为0-255之间的整数
VARCHAR(M)
M为0-65535之间的整数,值的长度+1个字节
TINYBLOB
允许长度0-255字节,值的长度+1个字节
BLOB
允许长度0-65535字节,值的长度+2个字节
MEDIUMBLOB
允许长度0-167772150字节,值的长度+3个字节
LONGBLOB
允许长度0-4294967295字节,值的长度+4个字节
TINYTEXT
允许长度0-255字节,值的长度+2个字节
TEXT
允许长度0-65535字节,值的长度+2个字节
MEDIUMTEXT
允许长度0-167772150字节,值的长度+3个字节
LONGTEXT
允许长度0-4294967295字节,值的长度+4个字节
VARBINARY(M)
允许长度0-M个字节的变长字节字符串,值的长度+1个字节
BINARY(M)M允许长度0-M个字节的定长字节字符串
特殊字符串类型
插入数据:

可以看出ENUM类型是忽略大小写的,在存储”M”,”f”时将它们都转成了大写,还可以看出对于插入不在ENUM指定范围内的值时,并没有返回警告,而是插入了enum(“M”,”F”)的第一个值”M”。


SET和ENUM除了存储之外,最主要的区别在于SET类型一次可以选取多个成员,而ENUM则只能选一个。

但是需要注意的是:

对于超出允许值范围的值将不允许注入,而对于包含重复成员的集合将只取一次。
关于mysql数据类型的相关知识我们就讲解到这里,期待下次与同学们再见噢~


作者: Yin灬Yan    时间: 2018-1-14 16:31
我来占层楼啊   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2