`

mysql里记录货币用什么字段类型好

 
阅读更多



create table t44(c2 decimal(5,2)) charset=utf8;

decimal(5,2)

-999.99 到 999.99





NUMERIC和DECIMAL类型被MySQL实现为同样的类型,这在SQL92标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。
DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度。
DECIMAL和NUMERIC值得最大的范围与DOUBLE一样,但是对于一个给定的DECIMAL或NUMERIC列,实际的范围可由制由给定列的precision或scale限制。


float,decimal精确度比较

float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,
用于定义货币要求精确度高的数据。在数据迁移中,float(M,D)是非标准定义,最好不要这样使用。M为精度,D为标度。

mysql>  create table t1(c1 float(10,2), c2 decimal(10,2),c3 float); // 10不包括小数点
mysql>  insert into t1 values(1234567.23, 1234567.23,1234567.23);
mysql>  select * from t1;
数据显示与所用的客户端工具有关
1.在Toad for MySQL中的显示为
c1                    c2                            c3
1234567    1234567.23        1234570



不定义fload, double的精度和标度时,存储按给出的数值存储,这于OS和当前的硬件有关。
decimal默认为decimal(10,0)
因为误差问题,在程序中,少用浮点数做=比较,可以做range比较。如果数值比较,最好使用decimal类型。
精度中,符号不算在内:
mysql> insert into t1 values(-98765430.21, -98765430.12);
mysql> select * from t1;   
c1                              c2        
-98765432.00        -98765430.12 




MySQL中的decimal
网络整理
十进制小数,他的精度高,而且没有误差。ta和浮点数相差很大。浮点数是直接把小数转化为二进制,二多数小数转化为二进制是有误差的,也就是说不能精确表示。decimal则可以没有任何误差的表示小数。
一般赋予浮点列的值被四舍五入到这个列所指定的十进制数。如果在一个FLOAT(8, 1)的列中存储1. 2 3 4 5 6,则结果为1. 2。如果将相同的值存入FLOAT(8, 4) 的列中,则结果为1. 2 3 4 6。这表示应该定义具有足够位数的浮点列以便得到尽可能精确的值。如果想精确到千分之一,那就不要定义使该类型仅有两位小数。
  浮点值的这种处理在MySQL3.23 中有例外,FLOAT(4) 和FLOAT(8) 的有所变化。这两种类型现在为单精度( 4 字节)和双精度( 8 字节)的类型,在其值按给出的形式存放(只受硬件的限制)这一点上说,这两种类型是真浮点类型。
  DECIMAL 类型不同于FLOAT和DECIMAL,其中DECIMAL 实际是以串存放的。DECIMAL 可能的最大取值范围与DOUBLE 一样,但是其有效的取值范围由M 和D 的值决定。如果改变M 而固定D,则其取值范围将随M 的变大而变大。表2 - 7的前三行说明了这一点。如果固定M 而改变D,则其取值范围将随D 的变大而变小(但精度增加)。表2 - 7的后三行说明了这一点。
  


  给定的DECIMAL 类型的取值范围取决于MySQL的版本。对于MySQL3.23 以前的版本,DECIMAL(M, D) 列的每个值占用M 字节,而符号(如果需要)和小数点包括在M 字节中。因此,类型为DECIMAL(5, 2) 的列,其取值范围为-9.99 到9 9 . 9 9,因为它们覆盖了所有可能的5 个字符的值。
  正如MySQL3.23 一样,DECIMAL 值是根据ANSI 规范进行处理的, ANSI 规范规定DECIMAL(M, D) 必须能够表示M 位数字及D 位小数的任何值。例如, DECIMAL(5, 2) 必须能够表示从-999.99 到999.99 的所有值。而且必须存储符号和小数点,因此自MySQL3.23以来DECIMAL 值占M + 2 个字节。对于DECIMAL(5, 2),“最长”的值(- 9 9 9 . 9 9)需要7个字节。在正取值范围的一端,不需要正号,因此MySQL利用它扩充了取值范围,使其超
  过了ANSI 所规范所要求的取值范围。如DECIMAL(5, 2) 的最大值为9 9 9 9 . 9 9,因为有7 个字节可用。
  简而言之,在MySQL3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于更早版本中的DECIMAL(M + 2, D) 的取值范围。在MySQL的所有版本中,如果某个DECIMAL 列的D 为0,则不存储小数点。这样做的结果是扩充了列的取值范围,因为过去用来存储小数点的字节现在可用来存放其他数字了啊。





  • 大小: 31 KB
分享到:
评论

相关推荐

    mysql里记录货币用什么字段类型好.docx

    MySQL 中记录货币的字段类型选择 在 MySQL 中,记录货币的字段类型选择对于精确地存储和计算货币值非常重要。...通过了解 MySQL 中记录货币的字段类型选择,可以更好地控制和存储货币值,确保数据的准确性和一致性。

    1,int(20)中20的涵义 2,为什么索引结构默认使用B+Tree,而不是Hash,二叉树,红黑树? 3、MySQL里记录

    3、MySQL里记录货币用什么字段类型好 4、数据库自增主键可能遇到什么问题。 5、从锁的类别角度讲,MySQL都有哪些锁呢? 6、索引失效情况? 7、优化特定类型的查询语句 8、MySQL数据库作发布系统的存储,一天五万条...

    MySQL2023年高级面试题,中级面试题,大汇总.txt

    3、MySQL里记录货币用什么字段类型好 4、数据库自增主键可能遇到什么问题。 5、从锁的类别角度讲,MySQL都有哪些锁呢? 6、索引失效情况? 7、优化特定类型的查询语句 8、MySQL数据库作发布系统的存储,一天五万条...

    2022 MySQL世界各个国家货币的中英文数据库

    MySQL是世界上最流行的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中,处理各种类型的数据,包括财务信息、用户信息等。2022年发布的“MySQL世界各个国家货币的中英文数据库”是一个专为存储全球货币...

    【数据面试系列】MySQL高频面试题及知识要点.pdf

    MySQL里记录货币用什么字段类型好?** 通常推荐使用`DECIMAL`类型来记录货币值,因为它可以精确地表示小数点后的位数,避免了浮点数类型的精度问题。 **7. NOW()和CURRENT_DATE()有什么区别?** - `NOW()`:返回...

    MySQL字段范圍

    MySQL字段范圍是数据库设计中的一个重要概念,它指的是在数据库表中某一列允许的数据范围或类型。理解并正确设定字段范围对于数据存储的有效性、安全性和性能至关重要。MySQL支持多种数据类型,每种数据类型都有其...

    MySQL基本数据类型.docx

    MySQL是一个广泛使用的开源关系型数据库管理系统,其支持多种数据类型来满足各种数据存储需求。以下是MySQL中一些主要的基本数据类型的详细说明: 1. **SMALLINT**: 这是一种整数类型,占用2个字节,可以存储从-32,...

    MySQL数据类型

    例如,对于经常进行排序和搜索的字段,使用整数类型可能会更快;对于存储大量文本的字段,TEXT和BLOB类型更为合适;而对于时间记录,DATE、TIME和TIMESTAMP各有优势,其中TIMESTAMP在插入或更新时会自动设置为当前...

    MySQL_数据类型_(列表).pdf

    ### MySQL 数据类型详解 在学习 MySQL 的过程中,了解并掌握其数据类型是非常重要的一步。不同的数据类型用于存储不同类型的信息,并且对于确保数据的准确性和...希望本文能够帮助您更好地理解和应用 MySQL 数据类型。

    CH03MySQL管理表记录.ppt

    总结来说,熟练掌握MySQL的表记录管理,尤其是基本数据类型的选择和使用,对于任何互联网相关的数据库管理都至关重要。通过合理设置数据类型和运用各种运算符,能确保数据的准确性和系统的高效运行。

    mysql数据库精深.docx

    本文将深入探讨MySQL的基础知识,包括数据类型、约束条件、表的操作以及查询语句。 1. 数据类型 在MySQL中,数据类型的选择对存储效率和查询性能有很大影响。无符号(unsigned)和有符号(signed)是整数类型的一个...

    mysql的使用心得

    - MySQL 4.1之后,字符串类型字段的长度被理解为字符长度而非字节长度。 **3. InnoDB表锁的变化** - **变更点** - MySQL 5.0.12及以后版本,增加了`innodb_table_locks`启动选项,允许在`LOCK TABLES`时请求...

    MySQL数据库:项目创建与维护学生信息管理数据表.pptx

    用数据库的专业术语来表示,这些列即是字段(Field),每个字段分别存储着不同性质的数据,而每一行中的各个字段的数据构成一条数据记录(Record)。表的结构定义工作即决定表拥有哪些字段以及这些字段的特性。所谓...

    10道经典MySQL⾯试题

    2. **MySQL中记录货币用什么字段类型好** - 对于货币数据,推荐使用 `DECIMAL` 或 `NUMERIC` 类型,因为它们能精确存储小数值,适合存储货币数据,避免浮点数误差。 3. **MyISAM与InnoDB的区别** - **事务支持**...

    MySql规范(系列一)

    2. **禁止使用小数存储货币**:考虑到货币计算的准确性,应以分为单位存储。 3. **禁止使用ENUM**:可以使用`TINYINT`代替,以提高查询性能。 4. **禁止使用外键**:虽然外键可以提供数据完整性约束,但可能会影响...

    Access2MySQLPro5

    Access支持的字段类型包括文本、数字、日期/时间、货币、自动编号等,而MySQL则有更为丰富的数据类型,如VARCHAR、INT、DATE、DATETIME、FLOAT等。因此,在迁移前,需要确保Access中的每个字段都能在MySQL中找到对应...

    MySQL建表样本数据代码.rar

    此外,需要注意的是,在实际使用时,应根据实际需求调整字段类型和长度,确保数据的完整性和准确性。在建表时,还应考虑添加索引以提高查询效率,如对经常用于搜索的列创建唯一或普通索引。同时,为了保证数据的一致...

    mysql 数据类型

    MySQL 数据类型是数据库设计的基础,它决定了数据在存储和处理时的精确度、范围和占用的空间。MySQL 提供了多种数据类型,以适应各种不同类型的数值、文本、日期/时间以及二进制数据的存储需求。 1. **整数类型**:...

    mysql的数据类型.pdf

    MySQL 数据类型是数据库管理系统中用来定义数据字段存储格式的关键元素,理解这些类型对于高效和准确地存储和操作数据至关重要。MySQL 提供了多种数据类型,包括数值型、字符型、日期和时间型以及特殊类型 NULL。 1...

Global site tag (gtag.js) - Google Analytics