本帖最后由 小江哥 于 2018-1-14 11:16 编辑
MySQL支持的数据类型数值类型[td]整数类型 | 字节 | 最小值 | 最大值 | TINYINT | 1 | 有符号-128 /无符号0 | 有符号127 /无符号255 | SMALLINT | 2 | 有符号-32768 /无符号0 | 有符号32767 /无符号65535 | MEDIUMINT | 3 | 有符号-8388608 /无符号0 | 有符号8388607 /无符号1677215 | INT、INTEGER | 4 | 有符号-2147483648 /无符号0 | 有符号2147483647 /无符号4294967295 | BIGINT | 8 | 有符号-9223372036854775808 /无符号0 | 有符号9223372036854775807 /无符号18446744073709551615 | [td]浮点数类型 | 字节 | 最小值 | 最大值 | FLOAT | 4 | ±1.175494351E-38 | ±3.402823466E+38 | DOUBLE | 8 | ±2.2250738585072014E-308 | ±1.7976931348623157E+308 | [td]定点数类型 | 字节 | 描述 | DEC(M,D) /DECIMAL(M,D) | M+2 | 最大取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定 | [td]位类型 | 字节 | 最小值 | 最大值 | BIT(M) | 1~8 | BIT(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));关于小数的表示:- 对于小数的表示,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]日期和时间类型 | 字节 | 最小值 | 最大值 | DATE | 4 | 1000-01-01 | 9999-12-31 | DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 | TIMESTAMP | 4 | 19700101080001 | 2038年的某个时刻 | TIME | 3 | -838:59:59 | 838:59:59 | YEAR | 1 | 1901 | 2155 | 日期和时间类型的零值表示[td]数据类型 | 零值表示 | DATE | 0000-00-00 | DATETIME | 0000-00-00 00:00:00 | TIMESTAMP | 00000000000000 | TIME | 00:00:00 | YEAR | 0000 |
注意:每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的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) | M | M为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数据类型的相关知识我们就讲解到这里,期待下次与同学们再见噢~
|
|