mysql数据库设计表时数据类型的选择

本文详细介绍了数据库中常见的数据类型,包括整数、实数、字符串、日期和集合类型。强调了整数类型的选择,如INT、BIGINT及其适用场景;浮点数与DECIMAL的比较;字符串类型如CHAR、VARCHAR的应用;日期类型DATETIME和TIMESTAMP的区别;以及ENUM和SET的使用。总结了数据类型选择的原则,如优先使用数字类型,根据需求选择精度等。
摘要由CSDN通过智能技术生成

说一下常用的几种数据类型

1、整数

整数类型存储空间范围(有符号)范围(无符号)
TINYINT8bit(1 字节)(-128,127)(0,255)
SMALLINT16bit(2 字节)(-32 768,32 767)(0,65 535)
MEDIUMINT24bit(3 字节)(-8 388 608,8 388 607)(0,16 777 215)
INT或INTEGER32bit(4 字节)(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
BIGINT64bit(8 字节)(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)
  • 一般情况下,如果选择int,推荐用有符号数,使用无符号数只是比原来多一倍得取值,数量级上没有改变。如果需要取值范围很大,直接选择用BIGINT
  • Mysql可以为整数类型指定宽度,比如INT(11),但是这是没有意义的,对于存储和计算来说,INT(1)和INT(20)是相同的,只是会限制可以表示的值范围。当存储时使用的存储空间依然是4字节。

2、实数

实数类型存储空间用途
FLOAT4 字节单精度浮点数
DOUBLE8 字节双精度浮点数值,精度比float高
DECIMAL

对DECIMAL(M,D) ,max(M,D)+2

小数值[精度十分高]
  • 如果要使用小数的话,直接用DECIMAL就好

3、字符串

类型说明最大长度
CHAR(N)定长字符255
VARCHAR(N)变长字符16384
BLOB(N)二进制大对象16K
TEXT(N)大对象16K
  • 什么时候用char:存储很短的字符串,或者所有值都接近一个长度;经常变更的数据:不容易产生碎片;非常短的列;
  • 什么时候使用varchar:列的更新很少:不容易产生碎片;大部分场景

4、日期类型

类型存储空间说明最大长度
DATETIME8个字节与时区无关'1000-01-01 00:00:00'到'9999-12-31 23:59:59'
TIMESTAMP4个字节时区转化‘1970-01-01 00:00:01” UTC ~ “2038-01-19 03:14:07’

选择datetime.

5、集合类型

  • ENUM类型最多允许65536个值;
  • SET类型最多允许64个值;
  • enum和set适合存储固定信息,比如人的性别,产品状态

 

总结:

  • 自增主键:int/bigint      推荐使用 int unsigned 上限为42亿;
  • 有限而且固定值列:如  enum('男','女') not null ,  status enum('开启','关闭') not null
  • 订单状态字段:int(1)/varchar(2) ; 然后去字典表中定义其各种值对应的含义;
  • 日期:datetime;
  • 货币/小数:decimal(11,2);

 

原则:

  • 能用数字类型的地方不要用字符串类型;
  • 除了特定需要精确数字类型的情况,浮点型比DECIMAL类型存储空间更小,计算也更加高效;
  • 能使用TIMESTAMP的场景尽量使用TIMESTAMP;
  • 整型类型指定长度信息不影响空间,字符串类型指定长度信息则影响存储空间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值