Mysql支持的数据类型
1 数值类型
1.1 整数类型
1)在整数类型中,如果超出类型范围的操作,会发生"Out of range"错误提示
2)可以使用zerofill,在数字位数不够的空间用字符"0"填满,显示仅在 windows 下通过cmd命令行使用mysql客户端工具才能够显示 或者linux下通过mysql 客户端命令行下可以显示
create table t1(id1 int(5) zreofill,id2 int (7));
3)如果插入大于看睹限制的值,不会对插入的数据有任何影响,还是按照原来的进度保存.
4)整数类型具有auto_increment,在需要产生唯一标识或顺序值时,可利用该属性,一个表中最多只能有一个auto_increment列,对于任何想要使用auto_increment的列,应定义为primary key 或者UNIQUE键,用法如下:
create table t(id int auto_increment not null primary key);
create table t(id int auto_increment not null ,primary key(id));
create table t(id int auto_increment not null, unique(id));
1.2 浮点数类型与定点数类型
浮点数和定点数都可以用"(M,D)“的方式来进行表示,其中M表示一共显示M位数字,D表示小数点后的位数.mysql保存值时会进行四舍五入,因此在float(7,4)列内插入999.00009,则近似结果为999.0001.需要注意的是,浮点数后米娜跟”(M,D)"的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用,float和double不指定精度时,默认会按照实际的精度(由实际的系统和硬件来决定)显示,decimal不指定精度时,默认整数位为10,默认小数位为0
1.3 位数型
- BIT类型用于存放位字段值,BIT(M)可以用来存放多为二进制数,M范围从1~64,如果不写默认为1位.对于位字段,直接使用select命令将不会看到结果,可以使用bin()(显示为二进制格式)或者hex()(显示为十六进制格式)函数进行读取.
- 数据插入bit类型字段时,首先转换为二进制,如果位数允许,则成功插入,如果位数大于实际定义的位数,则插入失败.如下实例:
create table t(id bit(2))
insert into t values(100)
2 日期事件类型
2.1 数据类型的区别如下:
1)如果只是用来保存年月日,通常用DATE来表示
2)如果只用来表示时分秒,通常用time来表示
3)如果用来表示年月日十分秒,通常用datetime来表示.datetime是date和time的组合
4)如果需要经常插入或者更新为当前系统事件,则通常使用timestamp来表示.timestamp值返回后显示为"YYYY-MM-DD HH:MM:SS"格式的字符串,显示宽度固定为19个字符,如果想要获得数字,应在timestamp列添加"+0"
5)如果只是表示年份,可以用yera来表示,它比date占用更少的空间.
6)timestamp的插入和查询都受当地时区的影响,更能反映出实际的日期.而datetime则只能反映出插入时当地的时区,其他时区的人查看数据必然会哟误差的
7)timestamp的属性受mysql版本和服务器SQLMod的影响很大
2.2 日期类型取值范围
每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的sqlmode下,系统会进行错误提示,并将以零值来进行存储.具体如下:
注意:
1)mysql只给表中的第一个timestamp字段设置默认值为系统日期,如果有第二个timestamp类型,则默认值为0,也可以将第二个timestamp的默认值设置为其他常量日期,但是不能修改为current_timestamp,强制修改会报错.
2)timestamp与时区相关,当插入日期时,会先转换为本地失去后存放,从数据库取出时,也同样需要将日期转换为本地时区后显示,因此两个不同时区的用户看到的同一个日期可能是不一样的
3)timestamp的取值范围为19700101080001到2038年的某一天,因此不适合存放比较久远的日期.
2.3 日期类型的插入格式
以DATETIME为例进行介绍:
1)YYYY-MM-DD HH:MM:SS或者YY-MM-DD HH:MM:SS格式的字符串,允许"不严格"语法,即任何标点符号都可以用作日期或时间部分之间的间隔符,如 “98.12.31 113922” 和 “98/12/31 11&39&22” 是等价的
2)YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的字符串,如果日期合法将会被正确解释,如"19970523091528"和"970523091528"可以解释为"1997-05-23 09:15:28",但"970523129015"是不合法的,将变为"0000-00-00 00:00:00"
3)如果数字是8位或者14位的,则假定为YYYYMMDD或者YYYYMMDDHHMMSS格式解释,如果6位或者12位,则假定为YYMMDD或YYMMDDHHMMSS格式解释
4)函数返回的结果,其值适合DATETIME,DATE或者TIMESTAMP
3 字符串类型
1)char长度固定,varchar长度可变,在查询的时候char列删除了尾部的空格,varchar不会
2) binary与varbinary类型
binary和varbinary类似与char和varchar,不同的是他们包含二进制字符串而不包含二进制字符串
3)enum
enum枚举类型,值的范围需要在建表的时候通过枚举方式指定,对1~255个成员的枚举需要一个字节存储;对于255-65535个成员,需要2个字节存储,enum忽略大小写,会统一转成大写
4)set类型
set与enum类型相似,也是一个字符串对象,里面恶意包含0-64个成员,1~8成员的集合,占一个字节,9-16成员的集合,占2个字节,17-24成员的集合,占3个字节,25-32成员的集合,占4个字节,33-64成员的集合,占8个字节