A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小江哥 于 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));
  • 1
  • 2
  • 3
关于小数的表示:
  • 对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种表示。定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度要求高的数据。
  • 浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,表示该值一共显示M位数字(整数位+小数位),其中D表示位于小数点后面的位数,M和D又称为精度和标度。
例如,定义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的表示方法非常类似,区别主要有以下几点:
  • timestamp支持的时间范围较小,datetime范围更大。
  • 表中的第一个timestamp列自动设置为系统时间,如果在一个timestamp列中插入NULL,则该值将自动设置为当前的日期和时间。在插入和更新一行但不明确给timestamp列赋值时也会自动设置该列的值为当前的日期和时间,当插入的值超出取值范围时,MySQL认为该值溢出,使用“0000-00-00 00:00:00”进行填补。
  • 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
    中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对1~255个成员的枚举需要1个字节存储;对于255~65535个成员的枚举需要2个字节存储。最多允许有65535个成员。

插入数据:

可以看出ENUM类型是忽略大小写的,在存储”M”,”f”时将它们都转成了大写,还可以看出对于插入不在ENUM指定范围内的值时,并没有返回警告,而是插入了enum(“M”,”F”)的第一个值”M”。
  • SET
    SET和ENUM非常类似,也是一个字符串对象,里面可以包含0~64个成员。根据成员的不同,存储上也有所不同。
    • 1~8成员的集合,占1个字节。
    • 17~24成员的集合,占3个字节。
    • 25~32成员的集合,占4个字节。
    • 33~64成员的集合,占8个字节。


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

但是需要注意的是:

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

1 个回复

倒序浏览
我来占层楼啊   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马