首页
学习
活动
专区
圈层
工具
发布

mysql decimal和int

基础概念

MySQL中的DECIMALINT是两种不同的数据类型,用于存储数值数据。

  • INT:整数类型,用于存储整数值。它可以是无符号或有符号的,并且有不同的大小范围。
  • DECIMAL:定点数类型,用于存储精确的小数值。它可以指定精度(总位数)和小数位数。

优势

  • INT
    • 存储空间较小,处理速度快。
    • 适用于不需要小数部分的整数数据。
  • DECIMAL
    • 支持精确的小数计算,避免了浮点数计算中的精度问题。
    • 适用于需要精确表示和计算小数的场景,如金融数据。

类型

  • INT
    • TINYINT:1字节,范围-128到127或0到255(无符号)。
    • SMALLINT:2字节,范围-32768到32767或0到65535(无符号)。
    • MEDIUMINT:3字节,范围-8388608到8388607或0到16777215(无符号)。
    • INT:4字节,范围-2147483648到2147483647或0到4294967295(无符号)。
    • BIGINT:8字节,范围-9223372036854775808到9223372036854775807或0到18446744073709551615(无符号)。
  • DECIMAL
    • DECIMAL(M,D):M是总位数,D是小数位数。例如,DECIMAL(10,2)表示最多10位数字,其中2位是小数。

应用场景

  • INT
    • 用户ID、订单号、数量等整数数据。
  • DECIMAL
    • 价格、汇率、税率等需要精确小数计算的场景。

常见问题及解决方法

问题:为什么使用DECIMAL而不是FLOAT或DOUBLE?

原因

  • FLOATDOUBLE是浮点数类型,存在精度问题,特别是在进行复杂的数学计算时。
  • DECIMAL提供了更高的精度,适用于需要精确计算的场景,如金融数据。

解决方法

  • 使用DECIMAL类型来存储和计算需要精确小数的数据。

问题:如何选择INT和DECIMAL?

解决方法

  • 如果数据不需要小数部分,并且对存储空间和处理速度有较高要求,选择INT
  • 如果数据需要精确的小数表示和计算,选择DECIMAL

示例代码

代码语言:txt
复制
-- 创建表时使用INT和DECIMAL
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    price DECIMAL(10, 2)
);

-- 插入数据
INSERT INTO products (name, price) VALUES ('Laptop', 999.99);
INSERT INTO products (name, price) VALUES ('Smartphone', 699.99);

-- 查询数据
SELECT * FROM products;

参考链接

希望这些信息对你有所帮助!如果有更多问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql decimal 空,MySQL DECIMAL数据类型

同事问MySQL数据类型DECIMAL(N,M)中N和M分别表示什么含义,M不用说,显然是小数点后的小数位数,但这个N究竟是小数点之前的最大位数,还是加上小数部分后的最大位数?这个还真记不清了。...于是乎,创建测试表验证了一番,结果如下: 测试表,seller_cost字段定义为decimal(14,2) CREATETABLE`test_decimal`(`id`int(11)NOTNULL,`...seller_cost`decimal(14,2)DEFAULTNULL) ENGINE=InnoDBDEFAULTCHARSET=utf8 起初,表中内容为空 mysql>select*fromtest_decimal...mysql补了两位小数“.00” mysql> select * from test_decimal; +—-+—————–+| id | seller_cost | +—-+—————–+|...mysql> insert into test_decimal(id,seller_cost) values(1,12.1);Query OK, 1 row affected (0.00 sec)mysql

5.4K20
  • MySQL的int (10) 和 int (11) 的区别

    一旦人工设置了 ZEROFILL 属性,MySQL 会自动设置 UNSIGNED 属性(即 ZEROFILL 不能存储负数)。 那取值范围和显示宽度到底有什么关系呢?...test_id_2 显示宽度为 4 两字段,接下来插入数据,同时插入 - 128、1 和 127 这些数值,看看会怎么样。...同理,所以 int (10) 和 int (11) 无任何区别,就是显示宽度不同。...Mysql 可以为整数类型指定宽度,例如 INT (11),对大多数应用这是没有意义的:他不会限制值的合法范围,只是规定了 Mysql 的一些交互工具,如 Mysql 命令行客户端,用来显示字符的个数。...对于存储和运算来说, INT (1) 和 INT (8) 是相同的。 是的,设置自动填充的时候用来显示补充0有点 用而已

    2.7K30

    MySQL中的float和decimal类型有什么区别

    对mysql 5来说 decimal(p,s)中p最大为65,S最大为30 decimal数据类型最多可存储 38 个数字,它存储了一个准确(精确)的数字表达法,不存储值的近似值。...当数据值一定要按照指定精确存储时,可以用带有小数的decimal数据类型来存储数字。 float和real数据类型被称为近似的数据类型。...这时就要用integer、decimal、money或smallmone数据类型。 在 WHERE 子句搜索条件中(特别是 = 和 运算符),应避免使用float或real列。...float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,用于定义货币要求精确度高的数据。...mysql> create table t1(c1 float(10,2), c3 decimal(10,2)); Query OK, 0 rows affected (0.02 sec) mysql

    4K20

    float double decimal类型的区别MySQL

    float和double都是浮点型: float数值类型表示单精度浮点数值 double数值类型表示双精度浮点数值 decimal是定点型 可用类型名称后加(M,D)来表示浮点型和定点型,其中M...表示该值的总共长度(精度),D表示小数点后面的长度(标度),如float(7,5)的可显示为-999.99999,MySQL保存值时进行四舍五入,如果插入999.000009,则结果为999.00001...FLOAT和DOUBLE默认会按照实际的精度来显示。 DECIMAL默认整数为10,小数为0。...浮点数若不写精度和标度,则会按照实际显示, 若有精度和标度,则会将数据四舍五入后插入,系统不报错 定点数如果不设置精度和标度,刚按照默认的(10,0)进行操作,如果数据超过了精度和标度值,则会警告!...对数据求SUM()时会出现不同的结果,float和double求SUM都会出现很多小数点,而decimal求SUM得到的是精准数值。

    39110

    谈谈MySQL如何选择float, double, decimal

    前言 我们知道在MySQL中有3种类型可以表示实数,分别是float,double和decimal。关于如何合理得使用这三种类型,网上的答案也层出不穷。...采用float和double本来就是不准的!! 实数保存和分配存储长度的关系 在MySQL官方里有这样一句话,数据准确度取决于分配给数据类型存储的长度。...关于decimal类型 通过前面的分析,了解了float和double类型的区别和误差来源。...但是decimal类型是MySQL官方唯一指定能精确存储的类型,也是DBA强烈推荐和金钱相关的类型都要存储为decimal类型,如果猜想decimal类型的存储格式的话,那么一下两种可以保持数据的准确性...继续扩大存储空间,比double更大一个级别,比如128位甚至更多 通过字符串化或者其他的方式特殊存储起来 这两种方式都能实现decimal精确存储,但是由于MySQL指定decimal类型最大长度为

    6.7K42

    int* i和int *i那种更好

    需要明确的是int* i与int *i是等价的。对于int* i和int *i那种更好,或许每个程序员都会有不同的评判,那个都不为过。   ...int* i-类型与星号贴合   一些人喜欢指针变量int* i;,这样看起来更符合变量与类型之间的关系,因为int*作为单独的类型(整型指针类型)更具有可读性。...int *i-星号与变量贴合   另外一些人喜欢int *i;因为解析器会将星号附加(绑定)到变量,而不是类型。另外在同一行中定义两个变量时,这就体现出它的意义了。...例: int* i, j; 想定义两个整型指针变量却的得到的是: int* i; int j; 显然和实际结果不一致。 个人观点   Qt君更倾向于星号与变量贴合的方式。...虽然使用上面哪一种方式都是可以的,但不建议写成以下的方式: int*i; int * i; int * i;

    1.3K20
    领券