8.2 第八章 选择合适的数据类型

8.3 浮点数与定点数

对于小数的表示,MySQL 分为两种方式:浮点数和定点数。浮点数包括 float(单精度)和 double(双精度),而定点数则只有 decimal 一种表示。定点数在 MySQL 内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

浮点数和定点数都可以用类型名称后加“(M,D)”的方式来进行表示,“(M,D)”表示该值一共显示 M 位数字(整数位+小数位),其中 D 位位于小数点后面,M 和 D 又称为精度和标度。例如,定义为 float(7,4)的一个列可以显示为-999.9999。MySQL 保存值时进行四舍五入,因此如果在 float(7,4)列内插入 999.00009,近似结果是 999.0001。值得注意的是,浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。float 和 double 在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示,而 decimal 在不指定精度时,默认的整数位为 10,默认的小数位为 0。

  • 各种数据类型的范围
解决方案1、decimal  在MySQL中,带有小数的精确运算可以使用decimal类型
  CREATE TABLE t3 (i INT, d1 decimal(10,3), d2 decimal(10,3));
  +------+---------+-------+  | i    | a       | b     |  +------+---------+-------+  |    6 | -51.400 | 0.000 |  +------+---------+-------+
限制  decimal的精确表示为decimal(M,D),其中M最大为65,D最大为30。因此其表示的范围是远远小于double所能表示的范围

2、基于应用的解决方案  比如商品价格涉及到小数,用20.95元表示,那么可以把价格变成以分为单位,即变成2095。

结论  不要使用float、double以及其等价类型做精确计算。如果要在MySQL中做精确计算,推荐使用decimal或者将相关计算任务交给应用。


8.4 日期类型选择
MySQL 提供的常用日期类型有DATE、TIME 、DATETIME、TIMESTAMP,它们之间的区
别在第3 章中已经进行过详细论述,这里就不再赘述。下面主要总结一下选择日期类型的原
则。
  • 根据实际需要选择能够满足应用的最小存储的日期类型。如果应用只需要记录“年
份”,那么用1 个字节来存储的YEAR 类型完全可以满足,而不需要用4 个字节来
存储的DATE 类型。这样不仅仅能节约存储,更能够提高表的操作效率。
  • 如果要记录年月日时分秒,并且记录的年份比较久远,那么最好使用DATETIME,
而不要使用TIMESTAMP。因为TIMESTAMP 表示的日期范围比DATETIME 要短得多。
  • 如果记录的日期需要让不同时区的用户使用,那么最好使用TIMESTAMP,因为日
期类型中只有它能够和实际时区相对应。

8.5 小结
本章中主要介绍了常见数据类型的选择原则,简单归纳如下。
? 对于字符类型,要根据存储引擎来进行相应的选择。
? 对精度要求较高的应用中,建议使用定点数来存储数值,以保证结果的准确性。
? 对含有TEXT 和BLOB 字段的表,如果经常做删除和修改记录的操作要定时执行
OPTIMIZE TABLE 功能对表进行碎片整理。
? 日期类型要根据实际需要选择能够满足应用的最小存储的日期类型。
时间: 2024-10-10 21:20:34

8.2 第八章 选择合适的数据类型的相关文章

8.1 第八章 选择合适的数据类型

在使用MySQL 创建数据表时都会遇到一个问题,如何为字段选择合适的数据类型.例 如,创建一张员工表用来记录员工的信息,这时对员工的各种属性如何来进行定义?也许大 家会想,这个问题很简单,每个字段可以使用很多种数据类型来定义,比如int.float.double. decimal 等.其实正因为可选择的数据类型太多,才需要依据一些原则来"挑选"最适合的 数据类型.本章将详细介绍字符.数值.日期数据类型的一些选择原则. 8.1 CHAR 与VARCHAR CHAR 和VARCHAR 类型

小蚂蚁学习mysql性能优化(7)--数据库结构优化--选择合适的数据类型

关于SQL以及索引优化的部分终于学习完了,今天开始进入第二层次的学习,数据库的结构优化,第一部分,选择合适的数据类型. 数据类型的选择,重点在于合适二字. 1.    使用可以存下数据的最小的数据类型 比如,一个时间类型的一个数据,可以使用varchar,可以使用datetime,还可以使用int,如何选择,就看哪一种类型对我们来说是最小的,不言而喻,int类型相对来说是最小的数据类型. 2.    使用简单的数据类型. int类型要比varchar类型在mysql处理上简单的多,用int类型来

Design6:选择合适的数据类型

数据库使用Table来存储海量的数据,细分Table结构,数据最终存储在Table Column中,因此,在设计Table Schema时,必须慎重选择Table Column的Data Type,数据类型不仅决定了Column能够存储的数据范围和能够进行的操作,而且合适的数据类型还能提高查询和修改数据的性能.数据类型的选择标准既要满足业务和扩展性的需求,又要使行宽最小(行宽是一行中所有column占用的Byte).最佳实践:使用与Column最大值最接近的数据类型. 例如,bit 类型只能存储

mysql选择合适的数据类型

MySQL之选择字段数据类型 MySQL支持的数据类型很多,选择正确的数据类型对于 获得高性能至关重要.在选择时有个简单的原则有助于做出更好的选择. 简单的原则: A.通常最小的是最好的 因为这样可以用更少的磁盘.内容.CPU缓存,大大减少IO开销. B.简单就好 简单的数据类型操作通常需要更少的CPU周期.例如,整型比字符操作代价更小,因为字符集和校对规则(排序规则)使它比整型更复杂.比如应该使用MySQL内建的类型而不是使用字符型来存储日期和时间. C.尽量避免使用NULL NULL是列默认

选择合适的数据类型

DataType 决定了Column能够存储的数据范围和能够进行的操作,例如bit 类型只能存储1,0 和 null,而varchar(10)能够存储最多10个字符,并可以对该column使用字符串函数.数据类型的选择标准既要满足业务和扩展性的需求,又要使行宽到达最小(行宽是一行中所有column占用的Byte).最佳实践:使用与Column Maximum Value 最接近的数据类型. 1,窄行会节省存储空间,减少IO次数 在满足业务需求和扩展性要求的情况下,使用窄的数据类型,使行的宽度达到

MATLAB中选择合适的数据类型以节约内存

在做大矩阵的运算,发现占用太多内存,于是在好友jcyao的提醒下,将double类型改为uint8类型内存是原来的1/8.(我的问题可以使用整形,其他问题不一定使用).在网上搜到一篇如何选择变量类型的文章,写的很清楚,先摘下来.其网站matlabtips.com 上面有很多好的建议和优化方法. Choose your variables wisely- Posted on March 21, 2012 by Jerome I am stuck home with a big fever so I

mysql如何选择合适的数据类型1:CHAR与VARCHAR

CHAR和VARCHAR类型类似,都用来存储字符串,但它们"保存"和"检索"的方式不同.CHAR属于"固定长度"的字符串,而VARCHAR属于"可变长度"的字符类型. 下表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别. CHAR和VARCHAR的对比 值 CHAR(4) 存储需求 VARCHAR(4) 存储需求 '' '    ' 4个字节 '' 1个字节

如何为MySQL选择更合适的数据类型

更小的通常更好 在表设计最开始之初,我认为这里的选择合适的数据类型是非常关键的,他可以尽可能减轻数据库的硬盘占用,和在查询的过程中越简单越小的数据类型则需要的占用了更小的cpu缓存,内存,硬盘,和相对应的处理cpu的周期. 简单就好 数据类型的选择应该保持越简单越好的准则, 比方说整形比起字符类型来说的代价更低,因为字符类型的校对规则和排序规则相对于整形来说更加复杂. 应该使用mysql 的内建类型而不是选择字符串来进行存储日期和时间,也应该使用整形来存储ip地址. 尽量避免NULL 而且应该避

MySQL 请选择合适的列! 转载(http://www.cnblogs.com/baochuan/archive/2012/05/23/2513224.html)

点击图片,可查看大图. 介绍 情况:如果你的表结构设计不良或你的索引设计不佳,那么请你优化你的表结构设计和给予合适的索引,这样你的查询性能就能提高几个数量级.——数据越大,索引的价值越能体现出来. 我们要提高性能,需要考虑的因素: 1.设计架构 2.设计索引 3.评估查询性能 今天要讲的是表列的设计,暂不谈索引设计.我会在下一章讲索引设计. 选择数据类型 选择正确的数据类型,对于提高性能至关重要. 下面给出几种原则,有利于帮助你选择何种类型. 1.更小通常更好. 使用最小的数据类型.——更少的磁