MySQL支持的数据类型

来源:互联网 发布:oracle查询不重复数据 编辑:程序博客网 时间:2024/05/28 04:55

3.mysql数值类型

分类:严格数值类型(INTEGER、SMALLINT、DECIMAL和NUMERIC)

近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)

在此基础上进行拓展,增加了TINYINT、MEDIUMINT和BIGINT等3种整型,以及用于存放位数据的BIT类型。


在整数类型中,按照取值范围和存储方式不同,分为tinyint、smallint、meiumint、int和bigint。

如果超出类型范围的操作,会发生“Out of range”错误提示。


在t1表中插入数据,进行对比:


发现在数值面前用字符“0”填充了剩余的宽度,id2中显示了正确的数值,并没有受到宽度限制的影响。


对于小数的表示,MySQL主要分为:浮点数和定点数

a.浮点数(float、double)

b.定点数(decimal,定点数在MySQL内部以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据)。


日期和时间类型

主要区别:

DATA,年月日

DATATIME,年月日时分秒

TIME,时分秒

TIMESTAMP,插入或更新日期为当前系统时间

YEAR,显示年份,比DATE占用更小空间。

MySQL中的日期和时间类型:

日期和时间类型字节最小值最大值DATE41000-01-019999-12-31DATETIME81000-01-01 00:00:009999-12-31 23:59:59TIMESTAMP4197001010800012038年的某个时刻TIME3-838::59:59838:59:59YEAR119012155

如:创建表t,字段分别为date,time,datetime三种日期类型


用now()函数插入当前日期:


显而易见,DATETIME是DATE和TIME的组合,可根据不同需要,来选择不同的日期或者事件类型来满足不同的应用。


CHAR和VARCHAR类型

CHAR列的长度固定为创建表的声明的长度,长度为0~255;

VARCHAR列中的值可变为长字符创,长度可以是0~65535。

在检索时,CHAR列删除了尾部的空格,而VARCHAR则保留了这些空格。

如:创建测试表vc

mysql>create table vc (varchar(4),char(4));


v和c列中同时插入字符串“ab 空格”;

mysql>insert into vc values('ab ','ab ');


显示各列字段的长度值只有2


查询结果:



BINARY和VARBINARY类型


可以发现,当保存BINARY值时,在值的最后通过填充“0x00”(零字节)以达到指定字段定义长度。对于一个BINARY(3)列,当插入时‘a’变为“a\0\0”。


ENUM(枚举)类型

枚举型的值范围需要在创建表时通过枚举方式显式指定,对于1~255个成员的枚举需要1个字节存储;对于255~65535个成员,需要2个字节存储。最多允许有65535个成员。

示例:

mysql>create table et(gender enum('M','F'));

mysql>insert into et values('M'),('1'),('f'),(NULL);

mysql>select * from et;


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


SET类型

SET类型也是字符串对象,里面可以包含0~64个成员。根据成员的不同,存储上也有不同:

1~8成员的集合,占1字节;

9~16成员的集合,占2个字节;

17~24成员的集合,占3个字节;

25~32成员的集合,占4个字节;

33~64成员的集合,占8个字节。

 

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

示例:


【注】SET类型可以允许值集合中选择任意1个或多个元素进行组合,所以对输入的值只要是在允许值的组合范围内,都可以正确地注入到SET类型的列中。对于超出允许值范围的值例如(‘a,d,f’)将不允许注入到上面例子中设置的SET类型列中,而对于(‘a,b,a’)这样包含重复成员的集合将只取一次,写入后的结果为“a,d”。

莫让幽怨记心头,你我不过半壶酒;策马奔腾何处走,我来世还复休。

原创粉丝点击