【MySQL】2025年带你玩转数据库-进阶篇之数据类型

写在前面

各位彦祖亦菲,可以给我点赞收藏关注嘛!!感激不尽

数据类型

整型:

分类
类型字节数有符号(默认)范围无符号(UNSIGNED)范围
TINYINT1 字节-128 到 1270 到 255
SMALLINT2 字节-32,768 到 32,7670 到 65,535
MEDIUMINT3 字节-8,388,608 到 8,388,6070 到 16,777,215
INTINTEGER4 字节-2,147,483,648 到 2,147,483,6470 到 4,294,967,295
BIGINT8 字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8070 到 18,446,744,073,709,551,615
int(n)
  • 在MySQL 8.0 已弃用,int(n)=int
  • 可以使用int(n) zerofill,这样是显示n位,不足的用0在前面补,超过了就正常显示原数
int(n) zerofill;
无符号类型怎么定义
  • 类型后面加unsigned
<type> unsigend;

浮点型

double,float,decimal
类型名称字节数精度范围(大致)精度控制
FLOAT(M, D)单精度浮点数4 字节~ ±3.4E38精度较低
DOUBLE(M, D)REAL双精度浮点数8 字节~ ±1.8E308精度高
DECIMAL(M, D)NUMERIC高精度定点数按精度存储范围由 M 控制精度最高(不丢失)
创建
  • 注意,M是总位数,及小数位数加上整数位数
  • D是小数位数
  • 所以整数最大位数是M-D,当赋值的时候超过了,在严格检查模式下会报错,不在,则会警告,且输入不是想要的结果
  • 小数位数随便多少都可以,但是会四舍五入成你想要的位数
  • float和double中在取多位小数的时候,会出现精度丢失的情况
  • 与语言类程序一样,在有高精度的字段中,不要用float和double
  • 高精度字段用decimal
alter table <表名> add <字段名> double(M,D);
alter table <表名> add <字段名> float(M,D);
alter table <表名> add <字段名> decimal(M, D);

字符型

类型最大长度字符集依赖存储方式适用场景备注
CHAR(M)255 字符取决于字符集定长,填充空格长度固定的字符串,如性别(M/F)、国家代码等固定长度,不节省空间
VARCHAR(M)65,535 字节取决于字符集变长,存储实际字符可变长度字符串,如用户名、电子邮件等节省空间,但处理较慢
TEXT65,535 字符取决于字符集变长,不定长长文本数据,如文章内容、评论等存储大文本,长度较长时使用
TINYTEXT255 字符取决于字符集变长,不定长小段文本,如评论摘要等TEXT 小,适合短文本
MEDIUMTEXT16,777,215 字符取决于字符集变长,不定长中等长度文本,如大段描述等TEXT 大,适合中等文本
LONGTEXT4,294,967,295 字符取决于字符集变长,不定长超大文本数据,如文章、文件内容等存储非常大的文本,适合文章、日志等

布尔类型

  • boolean
alter table <表名> add <字段名> boolean;

枚举类型(取一个)

  • 只能取该类型中的一个,不能取额外的,取额外的会报错
  • 枚举类型存储时是整数,也就是说,你在插入数据的时候用整数插入,也能插入你对应的字符串
  • 但是注意下标是从1开始的,如下面的的values1是1所对应的值,后面的依次对应
create table <table_name> (
  <字段名> enum('value1', 'value2', 'value3', ...) 
);

set类型(取多个)

创建
create table <table_name> (
  <字段名> set('value1', 'value2', 'value3', ...) 
);
插入
  • 注意,在一个‘’里逗号隔开,而不是在多个‘’里在外面逗号隔开
    正确的如下:
insert into <表名>(...) values(=='value1,value2'==)

错误的如下

insert into <表名>(...) values(=='value1'==, =='value2'==)

日期类型

类型格式范围精度支持常用场景
DATE'YYYY-MM-DD'1000-01-01 到 9999-12-31出生日期、节假日等
DATETIME'YYYY-MM-DD HH:MM:SS'1000-01-01 00:00:00 到 9999-12-31 23:59:59秒(支持到微秒)注册时间、下单时间
TIMESTAMP'YYYY-MM-DD HH:MM:SS'1970-01-01 00:00:01 到 2038-01-19秒(支持到微秒)自动记录创建/更新时间
TIME'HH:MM:SS'-838:59:59 到 838:59:59秒(支持到微秒)上班时间、倒计时
YEAR'YYYY'1901 到 2155出厂年份、毕业年份
创建
create table <表名> (
  <字段名> <日期类型>
);
赋值
  • 具体赋值跟着具体类型的格式给就行
  • 一般不会手动创建,一般都是自动生成的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值