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. 考试时间(精确到年月日)

    1. 学生姓名 (字符串类型,长度不超过10位)
    2. 排名(正常排名,不可能存储负数)

    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 ‘期末考试表’;