提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本篇主要总结介绍mysql数据表设计时最常用的几个数据类型,整型,字符型,时间类型等的注意事项
一、关于数字类型需要注意什么?
常用数字类型,整型和高精度型:
- 关于整型INT,在设计表对某些字段使用Unsigned类型时,考虑到可能该字段在实现某些功能需要做差值,因此需要设置为
mysql> SET sql_mode='NO_UNSIGNED_SUBTRACTION';
- 浮点类型 Float 和 Double,但这些类型因为不是高精度,也不是 SQL 标准的类型,所以在真实的生产环境中不推荐使用,否则在计算时,由于精度类型问题,会导致最终的计算结果出错。更重要的是,从 MySQL 8.0.17 版本开始,MySQL 提醒用户不该用上述浮点类型,甚至提醒将在之后版本中废弃浮点类型。
- 针对格式固定的浮点类型,比如常见字段金额,默认精确到分,其也不建议使用DECIMAL(),因为高精度类不定长,不定长存储会有碎片问题,,性能不好,因此建议使用big int类型,其按分为最小单位存储,其定长8字节,存储更紧凑,存储性能更高。
- 说到big int,其最常见使用是为自增id类型。但是自增有个坑是在mysql8.0之前,自增在数据库宕机时会有id回溯情况,因为自增id没有持久化,因此不推荐用自增id为主键。
二、字符型需要注意什么?
字符型:常用char和varchar:
- CHAR(N) 和 VARCHAR(N) (N为字符长度)虽然分别用于存储定长和变长字符,但对于变长字符集(如 GBK、UTF8MB4),其本质是一样的,都是变长,设计时完全可以