MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
分类 | 类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|---|
数值类型 | TINYINT | 1 byte | (-128,127) | (0,255)(例如:年龄age,没有负数,age tinyint unsigned) | 小整数值 |
SMALLINT | 2 bytes | (-32768,32767) | (0,65535) | 大整数值 | |
MEDIUMINT | 3 bytes | (-8388608,8388607) | (0,16777215) | 大整数值 | |
INT或INTEGER | 4 bytes | (-2147483648,2147483647) | (0,4294967295) | 大整数值 | |
BIGINT | 8 bytes | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 | |
FLOAT | 4 bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 | |
DOUBLE | 8 bytes | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) 例如:分数,score double(4,1) |
双精度浮点数值 | |
DECIMAL | 依赖于M(精度)和D(标度)的值(例如:12.62,它的精度是5,标度是2) | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
分类 | 类型 | 大小 | 描述 |
---|---|---|---|
字符串类型 | CHAR | 0-255 bytes | 定长字符串 (例如:char(10),如果只存储1个字符也会占用10个字符,其他9个字符会用空格不补齐,gender char(1)) |
VARCHAR | 0-65535 bytes | 变长字符串 例如:varchar(10),如果只存储1个字符只会占用1个字符,性能相较于char稍差,varchar因为需要根据内容来计算占用的空间,username varchar(50) |
|
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 | |
TINYTEXT | 0-255 bytes | 短文本字符串 | |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 | |
TEXT | 0-65 535 bytes | 长文本数据 | |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 | |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 | |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 | |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
分类 | 类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|---|
日期类型 | DATE | 3 | 1000-01-01 至 9999-12-31 (例如:birthday date) |
YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 | |
YEAR | 1 | 1901 至 2155 | YYYY | 年份值 | |
DATETIME | 8 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 | |
TIMESTAMP | 4 | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
案例1:根据需求创建员工表(设计合理的数据类型、长度)
设计一张员工信息表,要求如下:
1. 编号(纯数字)
2. 员工工号 (字符串类型,长度不超过10位)
3. 员工姓名(字符串类型,长度不超过10位)
4. 性别(男/女,存储一个汉字)
5. 年龄(正常人年龄,不可能存储负数)
6. 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
7. 入职时间(取值年月日即可)
create table emp(
id int comment ‘编号’,
emp_no varchar(10) comment ‘员工编号’,
emp_name varchar(10) comment ‘员工姓名’,
gender char(1) comment ‘性别’,
age tinyint unsigned comment ‘年龄’,
idcard char(18) comment ‘身份证号码’,
entry_day date comment ‘入职时间’
)comment ‘员工表’;
案例2:根据需求创建期末考试分数表(设计合理的数据类型、长度)
要求如下:
1. 编号(纯数字)
2. 科目 (字符串类型,长度不超过10位)
3. 得分(单精度)
4. 考试时间(精确到年月日)
- 学生姓名 (字符串类型,长度不超过10位)
- 排名(正常排名,不可能存储负数)
create table score(
id int comment ‘编号’,
course varchar(10) comment ‘科目’,
score double(4,1) comment ‘得分’,
exam_date date comment ‘考试日期’,
name varchar(10) comment ‘学生姓名’,
rank tinyint comment ‘排名’
)comment ‘期末考试表’;