MySQL中数据类型的介绍:数值类型、字符串类型、日期时间
MySQL 语法的分类
| 分类 | 全称 | 说明 |
|---|---|---|
| DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
| DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
| DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
| DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
以下是图片内容转换成的 Markdown 格式表格:
| 分类 | 类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
|---|---|---|---|---|---|
| 数值类型 | TINYINT | 1 byte | (-128, 127) | (0, 255) | 小整数值 |
| 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) | 双精度浮点数值 | |
| DECIMAL | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
优化刚刚的表结果
create table tb_user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
) comment '用户表';
刚刚,我们给用的年龄使用了int类型,
其实也可以使用 TINYINT 类型。
有因为年龄没有负数,我们可以使用 UNSIGNED 来表示无符号。
此时取值范围是 (0, 255)。
age TINYINT UNSIGNED comment '年龄'
字符串类型
以下是图片内容转换成的 Markdown 格式表格:
| 分类 | 类型 | 大小 | 描述 |
|---|---|---|---|
| 字符串类型 | CHAR | 0-255 bytes | 定长字符串 |
| VARCHAR | 0-65535 bytes | 变长字符串 | |
| 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 | 极大文本数据 |
varchar 和 char 的区别
| CHAR(n) | VARCHAR(n) | |
|---|---|---|
| 长度 | 固定,不够就补空格 | 变长,按实际内容存 |
| 额外开销 | 无 | 有额外的开销 |
| 取出的值 | 默认去掉尾部空格 | 保留尾部空格 |
| 性能 | 性能好 | 频繁更改性能没有CHAR好 |
| 空间 | 哪怕只存 1 个字符也占满 n | 用多少占多少 |
选型规则
用CHAR :长度 固定 且很短的值
gender CHAR(1) -- 性别
id_card CHAR(18) -- 身份证号
phone CHAR(11) -- 手机号
country CHAR(2) -- 国家代码
md5 CHAR(32) -- 哈希值
用VARCHAR :长度 不确定的值
name VARCHAR(50) -- 姓名
email VARCHAR(100) -- 邮箱
address VARCHAR(200) -- 地址
remark VARCHAR(500) -- 备注
常见误区
"CHAR 一定比 VARCHAR 快"
不一定。
值都很短时差别可以忽略;
VARCHAR 只在频繁改长度性能才有明显劣化。
使用建议
长度固定用 CHAR,长度不定用 VARCHAR;不确定时优先 VARCHAR
日期时间类型
| 分类 | 类型 | 大小 | 范围 | 格式 | 描述 |
|---|---|---|---|---|---|
| 日期类型 | DATE | 3 | 1000-01-01 至 9999-12-31 | 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.编号(纯数字)
2.员工工号(字符串类型,长度不超过10位)
3.员工姓名(字符串类型,长度不超过10位)
4.性别(男/女,存储一个汉字)
5.年龄(正常人年龄,不可能存储负数)
6.身份证号(二代身份证号均为18位,身份证中有X这样的字符)
7.入职时间(取值年月日即可)
根据刚刚我们总结的:固定长度使用char,变长使用varchar。
工号,姓名我们使用varchar类型。
性别,身份证号18位,我们使用char类型。
编号纯数字我们使用int就行。
年龄我们使用 tinyint unsigned (无符号整数)类型。取值范围是 (0, 255)。
入职时间我们使用 date 类型。
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
entrydate date comment '入职时间'
) comment '员工表';
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号