关于MySQL,你了解多少?_数据类型
来源:互联网 发布:方正字体排查软件 编辑:程序博客网 时间:2024/05/24 15:37
MySQL支持的数据类型
- 数值类型
- 日期时间类型
- 字符串类型
数值类型
**注意:**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。
日期时间类型
日期和时间类型
日期和时间类型的零值表示
注意:每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的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。
字符串类型
常规字符串类型
特殊字符串类型
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则只能选一个。
但是需要注意的是:
对于超出允许值范围的值将不允许注入,而对于包含重复成员的集合将只取一次。