mysql常见数据类型
- 数值类型
- 字符串类型
- 日期和时间类型
- 复合类型
- 空间类型(主要用于实现地理特征的生成,存储和分析)
一、数值类型
1. 整型 —> 分为有符号(signed)的和无符号(unsigned)的。
类型 | 占字节数 | 最大宽度 | 无符号的数值范围 | 有符号的数值范围 |
---|---|---|---|---|
int | 4 | int(11) | 0 到 2^32 – 1 | -2^31 到 2^31 – 1 |
tinyint | 1 | tinyint(4) | 0 到 2^8 – 1 | - 2^7 到 2^7 – 1 |
smallint | 2 | smallint(6) | 0 到 2^16 – 1 | - 2^15 到 2^15 – 1 |
mediumint | 3 | mediumint(9) | 0 到 2^24 – 1 | - 2^23 到 2^23 – 1 |
bigint | 8 | bigint(20) | 0到 2^64 – 1 | - 2^63 到 2^63 – 1 |
2. 浮点型 ----->只能为有符号的
类型 | 占字节数 | 备注 |
---|---|---|
float(m,d) | 4 | 单精度,m 为总个数, d 小数点后边位数 ,默认是float(10,2) |
double(m,d) | 8 | 双精度,m 为总个数,d为小数点后边位数,默认是double(16,4) |
decimal(m,d) | m字节(mysql3.23之前版本),m+2字节(mysql 3.23以后版本 ) | 储存为字符串的浮点数 m大小为1-256,d的大小为0-30,默认是decimal(18,9) |
使用注意事项:
-
性别:一般不存男或者女,而是使用无符号整型tinyint 来表示 :要么 0 要么1 要么2 。
-
年龄 :一般使用无符号整型 smallint 就ok。
-
在存储数据时,能用数字表示的就不要用字符串,主要是为了节约存储空间 。
-
float和double 属于非标准数据类型,在数据库中保存的是近似值,而 decimal 则以字符串的形式保存数值。对于精度比较高的东西,比如在银行中 ,对金额要求比较高 ,经常用的是 decimal 类型。
二、字符串类型
类型 | 字节大小范围 | 备注 |
---|---|---|
varchar | 0-255字节 | 可变长度字符串(必须指定长度) |
char | 0-255字节 | 固定长度字符串 |
tinytext | 0-255字节 | 短文本字符串(不能指定长度) |
text | 0-65535字节 | 长文本数据 |
longtext | 0-4294967295字节 | 极大文本数据 |
tinyblob | 0-255字节 | 二进制字符串(存储图片,视频等)(不能指定长度) |
blob | 0-65535字节 | 二进制形式的长文本 |
longblob | 0-4294967295字节 | 二进制形式的极大文本数据 |
使用注意事项:
- char 假定分配了30长度,如果实际字符超出了30长度 超出部分的字符截短;如果不足30长度,右边用半角空格补齐;
- varchar 假定分配了30长度,如果实际字符超出了30长度 超出部分的字符截短;如果不足30长度,不用空格补齐。
- blob 和 text的区别 :blob区分大小写 ,text 不区分大小写。
- varchar(m) —>这里的参数m是指字符串的字符个数,而不是指字符存储的字节长度。字符和字节的转换:utf8下,1字符=3字节;gbk下,1字符=2字节。
三、日期和时间类型
类型 | 所占字节数 | 存储格式 | 支持的范围 |
---|---|---|---|
date | 3 | YYYY-MM-DD | ‘1000-01-01’ 到 ‘9999-12-31’ |
time | 3 | HH:MM:SS | ‘-838:59:59’ 到 ‘838:59:59’ |
datetime | 8 | YYYY-MM-DD HH:MM:SS | ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ |
timestamp | 4 | 自动存储记录修改的时间,设置值时只允许设置数字类型的值 | 时间戳,从1970-01-01 00:00:00到当前的时间差值。 |
year | 1 | YYYY | 1901 到 2155 |
tips:开发过程中 好多产品用时间戳 代替 日期和时间 这样的好处也是为了节约空间。
四、复合类型
类型 | 说明 | 举例 |
---|---|---|
set | 集合类型 | set(‘num1’,‘num2’,‘num3’) |
enum | 枚举类型 | enum(‘num1’,‘num2’,‘num3’) |
说明:
enum类型,它的值范围需要在创建表时通过枚举方式显式指定,只允许从一个集合中一次取出一个成员,或者是一次插入一个成员。
set类型,也是一个字符串对象,里面包含了64个成员,根据成员的不同,存储也不同。允许从一个集合一次取出多个成员,也可以一次插入多个成员。
!!!以上所述的mysql数据类型,用到最频繁的就是数值类型,字符串类型以及日期时间类型了,所以在能力有限的前提下掌握好这三种数据类型即可,剩下的等到有余力再慢慢琢磨。。。。