mysql数据类型

数据库表的设计原则:

1.尽量减少数据的冗余
2.mysql中尽量不要存储json结构的字段,
3.为表的字段选择合适的数据类型。
4.尽量使用innodb引擎
5.同一个库中尽量使用相同的存储引擎

数据类型的设计原则

当一个列可以选择多种数据类型时,应该优先考虑数据类型,其次是日期类型或二进制类型,最后是字符类型。对于相同级别的数据类型,应该选择占用空间少的数据类型。

整数类型

类型存储空间SIGNED(有符号)UNSIGNED(无符号)
tinyint1字节-128~1270-255
smallint2字节-32768~327670-65535
mediumint3字节-8388608~83886070-16777215
int4字节-2147483648~21474836470-4294967295
bigint8字节

实数类型

类型存储空间是否是精确类型
FLOAT4
DOUBLE8
DECIMAL每4字节存9个数字,小数点占一个字节

存储财务相关的用decimal 其它的可以使用float和double;
MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
要定义数据类型为DECIMAL的列,请使用以下语法:
column_name DECIMAL(P,D);
在上面的语法中:
P是表示有效数字数的精度。 P范围为1〜65。
D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。

字符类型

varchar特点:
1.varchar用于存储变长字符串,只占用必要的存储空间
2.列的最大长度小于255则只占用一个额外的字符存储记录的长度
3.列的最大长度大于255则占用两个额外的字符存储记录的长度
4.varchar的最大长度为65535
varchar的长度选择问题
1.使用最小符合需求的长度
2.varchar(5)和varchar(255)的性能是不同的。
varchar的适用场景
1.字符串的长度分布不均匀
2.字符串很少被更新
3.使用了多字节字符集存储字符串

char类型
1.char类型是定长的
2.char类型的最大宽度为255
3.字符串存储在char中,会删除字符串末尾的空格
适用场景
1.适合存储字段长度分布均匀的字段
2.适合存储较短字符串
3.适合存储经常更新的字符串

日期类型

datetime:
以YYYY-MM-DD HH:MM:SS[.fraction]格式存储日期的时间
datetime=YYYY-MM-DD HH:MM:SS
datetime(6)=YYYY-MM-DD HH:MM:SS.fraction
datetime类型与时区无关,占用8个字节的存储空间
时间范围1000-01-01 00:00:00 到9999-12-31 23:59:59

timestamp
存储的由格林尼治时间到当前时间的毫秒数
以YYYY-MM-DD HH:MM:SS.[fraction]的格式显示,占用4个字节
时间范围 1970-01-01到2038-01-19
timestamp类型的显示依赖于所指定的时区
在行的数据修改时可以自动修改timestamp列的值

date
只存储日期 如存储生日字段
date存储1000-01-01到9999-12-31之间的日期
date的优点
1占用的字节数比使用字符串、datetime、int存储要少,使用date类型只需要三个字节
2使用date类型还可以利用日期时间函数进行日期之间的计算

time
只存储时间
存储格式为HH:MM:SS

存储日期时间数据的注意事项
1.不要使用字符串类型来存储日期时间数据
日期占用的存储空间更少
系统有很多的日期处理函数可以使用
日期类型可以直接进行比较搜索
2.使用int存储日期时间不如使用timestamp类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值