数据库的基本数据类型
阅读指南:
这是数据库系列的第二篇文章,感兴趣的读者可以阅读我的有关数据库的合集,一套系统性的基础教程,帮助读者们更全面的学习数据库的相关知识。
合集链接:
数据库详细基本教程
库的数据类型
1.整数类型
SQL的标准整数类型:
类型 | 存储字节 | 有符号区间 | 无符号区间 |
---|---|---|---|
SMALLINT | 2 | -2^15~ 2^15-1 | 0 ~ 2^16 |
INT(INTEGER) | 4 | -2^31 ~ 2^31-1 | 0 ~ 2^32 |
独属于MySQL的整数类型:
类型 | 存储字节 | 有符号区间 | 无符号区间 |
---|---|---|---|
TINYINT | 1 | -2^7~ 2^7-1 | 0 ~ 2^8 |
MEDIUMINT | 3 | -2^23 ~ 2^23-1 | 0 ~ 2^24 |
BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^32 |
例:
sql
stu_age TINYINT unsigned COMMENT '学生年龄,无符号',
注:
无符号的整数类型要添加 unsigned 修饰符。
2.浮点类型
类型 | 存储字节 | M(小数+整数位数) | D(小位数) |
---|---|---|---|
FLOAT(M, D) | 4 | M最大为24 | D最大为8 |
DOUBLE(M, D) | 8 | M最大为53 | D最大为30 |
例:
sql
stu_height float(4, 1) unsigned COMMENT '身高,保留一位小数,总共四位数,多位则四舍五入',
注: 现行的MySQL并不推荐使用这两种方法,未来版本可能会取消对他的支持。在如今的话,对于数据要求的精度并不是过高的话,可以使用。
3.定点数类型
类型 | 存储字节 | M(小数+整数位数) | D(小位数) |
---|---|---|---|
DECIMAL(M, D) | 动态计算 | M最大为65 | D最大为30 |
例:
sql
emp_salary DECIMAL(8, 1) COMMENT '工资,保留一位小数,总共八位数,多位则四舍五入',
注:
DECIMAL类型的存储空间是可变的,他的存储大小受DECIMAL数据类型定义是指定的精度和规模影响度。如果D为0,则DECIMAL定义的值不包含小数部分。
4.字符串类型
字符串 | 特点 | 长度 | 长度范围(字符) | 存储空间 |
---|---|---|---|---|
CHAR(M) | 固定长度 | M | 0<= M <= 255 | M * 4 个字节 |
VARCHAR(M) | 可变长度 | M | 最多为2^16 - 1 | M * 4 +1 个字节 |
注:
CHAR类型:
-
一般需要提前定义字符串长度,如果不指定M,则默认是1个字符。
-
保存数据时,若声明的字符串长度大于实际字符串长度,会在右边补空格。
-
当MySQL检索数据时,会自动去掉CHAR类型的数据的尾部空格。
VARCHAR类型:
- 定义时必须指定M,否则报错。
- 在MySQL5.0版本以上,VARCHAR(20) 指的是20个字符。
- 当MySQL检索数据时,会保留VARCHAR类型的数据的尾部的空格。
当存储对象较大时,则考虑将字符串类型转为文本类型数据来存储。
5.文本类型
文本字符串类型 | 特点 | 长度 | 长度范围(字符) | 存储空间 |
---|---|---|---|---|
TINYTEXT | 小文本,可变长度 | L | 0<= M <= 255 | L + 2 个字节 |
TEXT | 文本,可变长度 | L | 0<= M <= 2^16 − 1 | L + 2 个字节 |
MEDIUMTEXT | 中等文本,可变长度 | L | 0<= M <= 2^24 - 1 | L + 3 个字节 |
LONGTEXT | 大文本,可变长度 | L | 0<= M <= 2^32 - 1 | L + 4 个字节 |
例:
sql
CREATE TABLE 表名{
tx TEXT
}
注:
-
短文本,固定长度使用char,例如:性别,手机号;
-
短文本,非固定长度使用VARCHAR,例如:姓名,地址;
-
大文本,建议存储到文本文件,使用VARCHAR记录文件地址,不使用TEXT直接存储大文本,这很耗性能。
6.时间类型
类型 | 名称 | 字节 | 日期格式 | 小值 | 最大值 |
---|---|---|---|---|---|
YEAR | 年 | 1 | YYYY或YY | 1901 | 2155 |
TIME | 时间 | 3 | HH:MM:SS | -838:59:59 | 838:59:59 |
DATE | 日期 | 3 | YYYY-MM-DD | 1000-01-01 | 9999-12-03 |
DATETIME | 日期时间 | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 日期时间 | 4 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 | 2038-01-19 03:14:07 |
在对使用DATATIME和TIMESTAMP类型是,可以让他自动初始化和更新:
sql
# 方式一: 插入默认当前时间和修改自动更新当前时间
ts TIEMSTAMP DEFAULT CURENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, # 添加约束
dt DATETIME CRRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
# 方法二: 插入默认当前时间
ts TIEMSTAMP DEFAULT CURENT_TIMESTAMP,
dt DATETIME DEFAULT CURENT_TIMESTAMP,