2. MySQL字段类型【MySQL系列】

1.字段类型

1.1 整型

字段字节无符号取值范围有符号取值范围
TINYINT10-255-128 - 127
SMALLINT20 - 65535-2^15 (-32,768) 到 2^15 - 1 (32,767)
MEDIUMINT30 - 16777215-8388608到8388607
INT40 - 4294967295-2^31 (-2,147,483,648) - 2^31 - 1 (2,147,483,647)
BIGINT80 - 18446744073709551615-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807)

1.2 浮点数

浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2

字段字节释义无符号取值范围有符号取值范围
FLOAT4单精度浮点数0 - (1.175494351E-38,3.402823466E+38)(-3.402823466E+38~-1.175494351E-38) - 0 - (1.175494351E-38,3.402823466351E+38)
DOUBLE8双精度浮点数
DECIMAlM+2高精度小数类型随着M和D决定,DECIMAL(20,5)

慎用浮点数,原因在MySQL对浮点类型数据的存储方式存在坑
MySQL用4个字节存储FLOAT类型数据,用8个字节来存储DOUBLE类型数据。无论哪个,都是采用二进制的方式来进行存储的。比如9.625,用二进制来表达,就是1001.101,或者表达成1.001101×2^3。看到了吗?如果尾数不是0或5(比如9.624),你就无法用一个二进制数来精确表达。
怎么办呢?就只好在取值允许的范围内进行近似(四舍五入)。
DECIMAL可以避免丢失精度的问题
DECIMAL是把整数和小数分开存储,分别转为16进制数进行存储的。所以避免了转为2进制丢失精度的问题

1.3 字符串

字段位数最大存储备注
CHAR8255固定长度
VARCHAR865535可变长度
TINYTEXT8255小文本
TEXT865535文本格式
MEDIUMTEXT816777215中等文本
LONGTEXT84294967295长文本
ENUM1-265535枚举类型
SET1-864集合类型

1.4 日期和时间

字段格式范围字节数
YEARYYYY1901-21551
TIMEHH:MM:SS-838:59:59~838:59:593
DATEYYYY-MM-DD1000-01-01~9999-12-313
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC~ 2038-01-19 03:14:07 UTC4

2. 字段定义规范

2.1 如果存储的字符串长度几乎相等,使用char定长字符串类型

2.2 VARCHAR设置更小粒度

varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度 大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率

2.3 小数类型为decimal,禁止使用float和double

2.4 合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

2.5 主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名

2.6 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是,0 表示否)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值