前言

MySQL 中有很多字段类型,比如整数、文本、浮点数,等等。如果类型定义合理,就能节省存储空间,提升数据查询和处理的速度;如果数据类型定义不合理,就有可能会导致数据超出取值范围,引发系统报错,甚至可能会出现计算错误的情况,进而影响到整个系统。

准确地定义字段类型,不但关系到数据存储的效率,而且会影响整个信息系统的可靠性。所以,我们必须要掌握不同字段的类型,包括它们的适用场景、定义方法

1、整数类型

在评估用哪种整数类型的时候,你需要考虑存储空间和可靠性的平衡问题:

  1. 用占用字节数少的整数类型可以节省存储空间;
  2. 要是为了节省存储空间,使用的整数类型取值范围太小,一旦遇到超出取值范围的情况,就可能引起系统错误,影响可靠性。

在实际工作中,系统故障产生的成本远远超过增加几个字段存储空间所产生的成本。因此,我建议你首先确保数据不会超过取值范围前提下,再去考虑如何节省存储空间

2、浮点数类型

浮点数类型有个缺陷,就是不精准。因此,在一些对精确度要求较高的项目中,千万不要使用浮点数,不然会导致结果错误,甚至是造成不可挽回的损失。下面我来重点解释一下为什么 MySQL 的浮点数不够精准:

为何MySQL浮点数据类型不精准?

在一些对精度要求不高的场景下,比起占用同样的字节长度的定点数,浮点数表达的数值范围可以更大一些。

浮点类型取值范围大,但是不精准,适用于需要取值范围大,又可以容忍微小误差的科学计算场景(比如计算化学、分子建模、流体动力学等)

3、定点数类型

就像浮点数类型的存储方式,决定了它不可能精准一样,DECIMAL 的存储方式决定了它一定是精准的

DECIMAL 是把十进制数的整数部分和小数部分拆开,分别转换成十六进制数进行存储。这样,所有的数值都可以精准表达了,不会存在因为无法表达而损失精度的问题。

定点数类型取值范围相对小,但是精准,没有误差,适合于对精度要求极高的场景(比如涉及金额计算的场景)

4、文本类型

TEXT 类型是 MySQL 支持的文本类型的一种。此外,MySQL 还支持 CHAR、VARCHAR、ENUM 和 SET 等文本类型。

因为不需要预先知道字符串的长度,系统会按照实际的数据长度进行存储,所以 TEXT 类型最为灵活方便

不过,需要注意的是,TEXT 也有一个问题:由于实际存储的长度不确定,MySQL 不允许 TEXT 类型的字段做主键。遇到这种情况,你只能采用 CHAR(M),或者 VARCHAR(M)

所以,建议在项目中,只要不是主键字段,就可以按照数据可能的最大长度,选择这几种 TEXT 类型中的的一种,作为存储字符串的数据类型。

5、日期时间类型

用得最多的日期时间类型,就是 DATETIME。

虽然 MySQL 也支持 YEAR(年)、TIME(时间)、DATE(日期),以及 TIMESTAMP 类型,但是我建议你,在实际项目中,尽量用 DATETIME 类型。因为这个数据类型包括了完整的日期和时间信息,使用起来比较方便。

如果日期时间信息分散在好几个字段,就会很不容易记,而且查询的时候,SQL 语句也会更加复杂。

为了确保数据的完整性和系统的稳定性,优先考虑使用 DATETIME 类型。因为虽然 DATETIME 类型占用的存储空间最多,但是它表达的时间最为完整,取值范围也最大。

为什么时间类型 TIME 的取值范围不是 -23:59:59~23:59:59 呢?

原因是 MySQL 设计的 TIME 类型,不光表示一天之内的时间,而且可以用来表示一个时间间隔,这个时间间隔可以超过 24 小时。

总结

今天,我给你介绍了几个常用的字段数据类型,包括整数类型、浮点数类型、定点数类型、文本类型和日期时间类型。同时,我们还清楚了为什么整数类型用得少,浮点数为什么不精准,以及常用的日期时间类型。

最后,分享 1 个小技巧:

在定义数据类型时,如果确定是整数,就用 INT;
如果是小数,一定用定点数类型 DECIMAL;
如果是字符串,只要不是主键,就用TEXT;
如果是日期与时间,就用 DATETIME。

这样做的好处是,首先确保你的系统不会因为数据类型定义出错。

不过,凡事都是有两面的,可靠性好,并不意味着高效。比如,TEXT 虽然使用方便,但是效率不如 CHAR(M) 和 VARCHAR(M)。

MySQL字段类型如何选择?相关推荐

  1. MySql字段类型的选择

    1.主键设计 主键不要与业务逻辑有所关联,最好是毫无意义的一串独立不重复的数字,且自增,最好设计为Long类型,对应MySQL的bigint bigint详解: MySQL_bigint(20) 是什 ...

  2. php数据库字段类型,mysql 字段类型说明

    mysql 字段类型说明 更新时间:2007年04月27日 00:00:00   作者: MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用 ...

  3. MySQL字段类型解析

    前言: 要了解一个数据库,我们必须了解其支持的数据类型.MySQL 支持大量的字段类型,其中常用的也有很多.前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇 ...

  4. MySQL字段类型详解

    MySQL字段类型详解 2009-01-05 09:25 来源:泡菜博客 0个评论 分享文章 A- A+ 百度权重查询 词库网 网站监控 服务器监控 SEO监控 Swift编程语言教程 MySQL支持 ...

  5. MySQL字段类型对应Java字段

    前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...

  6. MySql 字段类型对应 Java 实体类型

    前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...

  7. 原 hibernate与mysql字段类型对应关系

    原 hibernate与mysql字段类型对应关系 发表于8个月前(2015-04-17 08:56)   阅读(1102) | 评论(0) 2人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC ...

  8. MySQL 字段类型解析

    MySQL字段类型 MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 字符串 char和varchar: 1.char(n) 若存入字符数小于n,则以空格补于 ...

  9. MySQL字段类型与Java中类型的对应

    MySQL字段类型与Java中类型的对应 在设计数据的时候,需要与Java里的类型进行匹配,我自己在设计过程中参考的内容如下 编号 类型名称 显示长度 数据库类型 Java类型 备注/描述 0 VAR ...

最新文章

  1. 《LeetCode力扣练习》第53题 最大子数组和 Java
  2. android service是单例么,android 使用单例还是service?
  3. Struts2核心工作原理解析
  4. 使用maven profile实现多环境可移植构建
  5. mysql 存储过程求和_MySQL - 存储过程和函数
  6. 关于mysql的cpu占用高的问题
  7. “互联网+”为移动医疗提供的七大有力武器!
  8. python使用virtualenvwrapper
  9. 开源:Taurus.MVC 框架 (已支持.NET Core)
  10. 请问你写书法多少年了?领悟到了什么?
  11. linux后台开发核心技术
  12. c语言入门经典+第5版+习题答案,《C语言入门经典(第5版)》—甲虎网一站式图书批发平台...
  13. 解二元一次方程组的c语言编程,如何利用C语言求二元一次方程的解
  14. 遗传算法求解多约束、多类型车辆、多目标优化的车辆路径问题
  15. iOS 出现:不受信任的开发者 弹框
  16. VSCode格式化JS自动添加或去掉分号
  17. 用JQuery实现简单计时答题游戏
  18. 信息传递(tarjan算法)
  19. Git 中 git restore 的使用
  20. 解决-使用html2canvas截取页面时,页面的div背景图无法截取并跨域

热门文章

  1. uniapp微信公众号h5接入网易七鱼客服系统
  2. 中国/玩具鸭舰队/漂流15年 今夏将抵英国
  3. 情绪是人生最大的敌人
  4. 50个常见的 Java 错误(第三部分)
  5. js调用app下载或者打开app(手机下载或者打开新的页面)
  6. 11、pytest -- 测试的参数化
  7. 分区表与普通表之间切换的报错
  8. 智慧灯杆项目案例:点亮科技城市!宁波第一个5G智能路段投入使用!
  9. 阿里云内网和公共NTP服务器(网络时间协议-时间同步服务)
  10. 最全maven archetype 配置!