首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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)中NM分别表示什么含义,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

4.3K20
  • MySQLint (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有点 用而已

    1.8K30

    MySQL中的floatdecimal类型有什么区别

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

    2.3K20

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

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

    4.5K42

    intint32的区别_int是多少位的

    大家有没有写了很久代码,还不知道这个Int8,Int16, Int32, Int64有什么区别呢?或者是为什么后面的数字不一样呢? 初步了解了一下,才清楚这个东西。...先来扫盲一下计算机存储单元,   在计算机内部,信息都是釆用二进制的形式进行存储、运算、处理传输的。信息存储单位有位、字节字等几种。...各种存储设备存储容量单位有KB、MB、GBTB等几种 计算机的基本的存储单元有:   位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。...而Int8,Int16,Int32,nt64,后面的数字就代表这个数据类型占据的空间。 Int8, 等于Byte, 占1个字节.  ...Int16, 等于short, 占2个字节. -32768 32767   Int32, 等于int, 占4个字节. -2147483648 2147483647   Int64, 等于long

    3K20

    int* iint *i那种更好

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

    98320
    领券