MySQL学习之数据类型
一.数据类型
我们对数据类型的了解可以让我们在设计表的时候避免不必要的空间浪费。
在MySQL中的数据类型大概可分为四类:
1)数值数据类型
2)日期时间数据类型
3)文本字符串数据类型
4)二进制字符串数据类型
下面一一介绍它们的特性:
1.数值数据类型
1)整数型数据类型
类型名称 | 字节数 |
---|---|
TINYINT | 1字节 |
SMALLINT | 2字节 |
MEDIUMINT | 3字节 |
INT | 4字节 |
BIGINT | 8字节 |
2)浮点数数据类型
类型名称 | 字节数 |
---|---|
FLOAT | 4字节 |
DOUBLE | 8字节 |
DECIMAL(M,D) | M+2字节 |
其中,前面两个好理解,最后一个DECIMAL类型不同于前两个,它实际上是以串存放的,DECIMAL
的有效取值范围由M和D的值决定,前面的M表示存储空间,后面的D表示精度,例如:
不指定时默认为(10,0)
2.日期与时间类型
类型名称 | 日期范围 |
---|---|
YEAR | 1901~2155 (1字节) |
TIME | -838:59:59~828:59:59(3字节) |
DATE | 1000-01-01~9999-12-3(3字节) |
DATETIME | 1000-01-01 00:00:00~9999-12-31 23:59:59 (8字节) |
TIMESTAMP | 1970-01-01 00:00:01~2038-01-19 03:14:07 (4字节) |
3.文本字符串数据类型
类型名称 | 说明 |
---|---|
CHAR(M) | M个字节 1<=M<=255 |
VARCHAR(M) | L+1字节(L为实际字符串长度),L<=M 1<=M<=225 |
TINYTEXT | L+1字节 ,L<2^8 |
TEXT | L+2字节 ,L<2^16 |
MEDIUMTEXT | L+3字节,L<2^24 |
LONGTEXT | L+4字节,L<2^32 |
ENUM | 1或2个字节,取决于枚举值的数量 |
SET | 1,2,3,4,8字节,取决于集合成员数量 |
下面详细学习:
1)CHAR与VARCHAR类型
CHAR(M)为为固定长度字符串,当插入的字符串长度不够时,会以空格填充,被检索时,会自动删除空格。
VARCHAR(M)为长度可变的字符串,M表示最大长度,当插入的字符串长度为L时,会存储L个字符串和一个字符串结束字符,故为L+1个
2)TEXT类型
TEXT列保存非二进制的长字符串,如文章内容。 当保存或查询TEXT列的值时,不会删除尾部空格。
3)ENUM类型
ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值:
字段名 ENUM('value1','value2','value3',...,'valueN')//最多65535个
valueN值枚举列表中的第n个值,ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一次,如果创建的成员中有空格时,其尾部的空格将自动被删除,ENUM值在内部用整数表示,每个枚举值均有一个索引值,从1开始,例如:
4)SET类型
SET是一个字符串对象,可以有零或多个值,SET列最多可以有64个成员,其值为表创建时规定的一列值:
SET ('value1','value2','value2',...,'valueN')
与ENUM相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号。
与ENUM不同,SET类型的列可从定义的列值中选择多个字符的联合,如果插入SET字段中列值有重复,那么MySQL会自动删除重复的值
使用实例:
注意:对于set来说,如果插入的值为重复的,则只取一个,如果插入了不按顺序排列值,则自动按顺序插入。
4.二进制字符串类型
类型名称 | 说明 |
---|---|
BIT(M) | 位字段类型 约(M+7)/8字节 |
BINARY(M) | 固定长度二进制字符串 M字节 |
VARBINARY(M) | 可变长度二进制字符串 M+1字节 |
TINYBLOB(M) | 非常小的BLOB L+1字节,L<2^8 |
BLOB(M) | 小BLOB L+2字节 L<2^16 |
MEDIUMBLOB(M) | 中等大小的BLOB L+3字节,L<2^24 |
LONGBLOB(M) | 大BLOB L+4字节 ,L<2^32 |
BLOB 数据类型以随机存取块(称为智能大对象空间)的形式存储任何种类的二进制数据。二进制数据通常由已保存的电子表格、程序装入模块和数字化声音模式等等组成。数据库服务器不会对 BLOB 列的内容进行解释。