Mysql:数据类型介绍
字段数据类型
整数类型
只能存储整数的数字。不同的整数类型区别在于存储数字的大小。如果说平时保存的数字很小不超过3位数,可以使用tinyint,保存数字特别大则可用bigint
常用整数类型:tinyint,int,bigint
上面是各整数类型的存值范围(有无符号表示有无加unsigned);然后相信大家经常还能看到类似:int(11),tinyint(4)...后面括号里的数字表示宽度,即在能存储的范围内,能接受数字的最大位数(包括负号),比如说 12就是2位,2122就4位。
但重点来了,他这个宽度没啥很大用处,在mysql8.0被优化掉了,所以大家了解下就好。
浮点类型
只能存储数字,但可存储有小数点的数字。如1,1.11都可进行存储。但会出现精度丢失的情况,因此实际在开发和生产很少去使用浮点类型
定点数类型
典型代表decimal,decimal的作用和浮点类型一样,但不同是不会出现精度丢失,因此在涉及金额或者不允许误差的业务场景下,使用的频率非常高。基本代替了浮点类型的使用
然后经常能看到decimal类型的字段有 decimal(M,D)的形式,M表示精度,D表示标度。说人话就是:M是保存数值能接受的最大位数(记住这里的位数不包括符号和小数点号),D表示必须保留的小数位数,不够位后面补0;
举个例子,假设decimal(5,2),
- 传123.45,实际保存123.45(5位)
- 传12.45,实际保存12.45(4位)
- 传12.4,实际保存12.40(4位)
- 传0,实际保存0.00(3位)
日期时间类型
保存日期或时间。
常用日期时间类型:Date(年月日)、DateTime(年月日时分秒)、TIMESTAMP(年月日时分秒)
Date插入示例:
INSERT INTO test_date1
VALUES
('2020-10-01'),
('20201001'),
(20201001);
DateTime和TIMESTAMP插入示例:
INSERT INTO test_datetime_timestamp
VALUES
('2021-01-01 06:50:30'),
('20210101065030');
开发建议
用得最多的日期时间类型,就是 DATETIME 。虽然 MySQL 也支持 YEAR(年)、 TIME(时间)、DATE(日期),以及 TIMESTAMP 类型,但是在实际项目中,尽量用 DATETIME 类型。因为这个数据类型包括了完整的日期和时间信息,取值范围也最大,使用起来比较方便。毕竟,如果日期时间信息分散在好几个字段,很不容易记,而且查询的时候,SQL 语句也会更加复杂。
此外,一般存注册时间、商品发布时间等,不建议使用DATETIME存储,而是使用 时间戳 ,因为DATETIME虽然直观,但不便于计算。
文本字符串类型
用于保存字符串。上面列举都可存储字符串,不同还是存储字符串的大小。
常用文本字符串类型:varchar(最常见)、text(小作文啥的可用)、LongText(大文本使用,如base64字符串)
MySQL5.0版本以上,varchar(20):指的是20字符。一个字符包括字母,数字,汉字。
InnoDB 存储引擎,建议使用VARCHAR类型,所以无脑用varchar就可以了。
二进制类型
用于保存字节数据。像音频、视频、图片不能用字符串或者数字类型表示,就可以字节的方式存储在二进制类型的字段里
但是平时特别少见,考虑到数据库数据量和读取,不会把大数据的东西放在Mysql、Oracle等关系型数据库中,一般优先考虑非关系型数据库进行存储
创建表指定字段 或 添加字段时涉及关键字
unsigned:用于在数字类型的字段,此字段只能为正数不允许负数
characted set '字符集':指定数据库 或 数据表 或 字段的字符集。示例如下:
数据库指定字符集:
create database if not exists 数据库名 characted set '字符集';//指定字符集
show create database 数据库名;//查看数据库库字符集情况
创建表指定字符集:
create table 表名(
字段1 数据类型1
) characted set '字符集';//指定表的字符集
show create table 表名;//查看表的字符集情况
创建表时指定字段的字符集:
create table 表名(
字段1 数据类型1 characted set '字符集'
);//指定字段的字符集
show create table 表名;//查看字段的字符集情况
注意:如果字段没指定字符集,按表来,表没有,按数据库来。如果数据库没有,可以使用如下命令:
show variables like 'character_%'
红色部分的则是数据库未指定字符集情况下默认的字符集。