3.mysql数据类型选择

本文介绍了数据库设计中的三个范式,以及不同数据类型的选择标准,包括数值类型、日期时间类型和字符串类型的适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据库设计范式

1NF:列不可分。每一列都是不可分割的基本数据项


2NF:1NF的基础上面,非主属性完全依赖于主关键字


3NF:属性不依赖于其它非主属性 , 消除传递依赖

2.数据库字段选择

各类型取值范围:(为总长度,d为小数位数)

bit          m为每一个值所占的位数,范围1-64,默认1

tinyint    unsigned 取值0 to 255,signed 取值-128 to 127

bool,Boolean     同tinyint(1),0为false,非0为true

smallint          unsigned 取值0 to 65535,signed取值-32768 to 32767

medumint     unsigned 取值 0 to 16777215.signed 取值 -8388608 to 8388607.

int                  unsigned 取值 0 to 4294967295signed-2147483648 to 2147483647.

bigint            unsigned:  0 to18446744073709551615,signed -9223372036854775808 to9223372036854775807.

decimal(m,d)        m为值的总长度,默认为10,最大65;d为小数位数,默认为0,最大30
float(m,d)         signed   -3.402823466E+38 to -1.175494351E-380, unsigned 1.175494351E-38 to3.402823466E+38
doublem,d)    signed1.7976931348623157E+308 to -2.2250738585072014E-3080, unsigned2.2250738585072014E-308 to 1.7976931348623157E+308.
floatp             p0-24 将以float处理,25-53将以double处理

时间日期   默认以0格式表示,第一行timestamp默认为当前时间

date               '1000-01-01' to '9999-12-31'

datetime        '1000-01-01 00:00:00' to '9999-12-31 23:59:59'

timestamp    '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

time              '-838:59:59' to '838:59:59'.

YEAR[(2|4)]   2 70 to 69     4:  1901 to 2155,

        字符串   默认为空,enum列默认为第一个值

char(m)    定长,m最大值255,默认为1。可设为char(0):存放null和空值

varchar(m)  不定长,m最大值65535

binary(m)   定长二进制

varbinary(m) 不定长二进制

tinyblob     最大值255字节

blob(m) 最大65535字节,使用2字节来记录字节数

mediumblob 最大1677725字节,3字节记录长度

longblob     最大4G字节,由参数和可用内存控制,使用4字节记录长度

tinytext      最大255字符,由具体字符集控制,使用一个字节来记录字节数

text       最大65535字符,由具体字符集控制,使用2个字节来记录字符数

mediumtext 最大1677725字符,由具体字符集控制,使用3个字节来记录字符数

longtext   最大4G字符,由具体字符集控制,使用4个字节来记录字符数

enum     mysql内部用数值存储,最大可存储65535个值,每个值有且只能有enum中一个值

set      每个值为set的真子集,也可为0。最大可以有64个成员。mysql 内部使用数值存储


3.结论

    • 经常变化的字段用varchar;
    • 知道固定长度的用char;
    • 尽量用varchar;
    • 超过255字节的只能用varchar或者text;
    • 能用varchar的地方不用text;
    • 能够用数字类型的字段尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值