数值类型-数字
前言
在MySQL中,数值类型用于存储各种数字数据。合理选择和使用数值类型对于数据的准确性、存储效率和后续运算都至关重要。本文将详细介绍MySQL中的数值类型。
1. 数值类型总览
MySQL的数值类型主要分为两大类:整数类型和小数类型(包括浮点数和定点数)。下表总结了常用的数值类型及其特点:
类型 | 字节数 | 有符号范围 | 无符号范围 | 说明 |
---|---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 | 极小整数 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 | 小整数 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 | 中等整数 |
INT/INTEGER | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 | 标准整数 |
BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 | 大整数 |
FLOAT | 4 | 近似值 | 近似值 | 单精度浮点数 |
DOUBLE | 8 | 近似值 | 近似值 | 双精度浮点数 |
DECIMAL(M,D) | 可变 | 精确值 | 精确值 | 定点数,常用于金额 |
2. 每种数值类型的代码示例
2.1 整数类型
-- TINYINT 示例
CREATE TABLE example_tinyint (
id TINYINT,
flag TINYINT UNSIGNED
);
-- SMALLINT 示例
CREATE TABLE example_smallint (
id SMALLINT,
score SMALLINT UNSIGNED
);
-- MEDIUMINT 示例
CREATE TABLE example_mediumint (
id MEDIUMINT,
value MEDIUMINT UNSIGNED
);
-- INT/INTEGER 示例
CREATE TABLE example_int (
id INT,
count INT UNSIGNED
);
-- BIGINT 示例
CREATE TABLE example_bigint (
id BIGINT,
total BIGINT UNSIGNED
);
2.2 浮点数类型
-- FLOAT 示例
CREATE TABLE example_float (
temperature FLOAT
);
-- DOUBLE 示例
CREATE TABLE example_double (
distance DOUBLE
);
2.3 定点数类型(DECIMAL)
-- DECIMAL 示例,常用于金额
CREATE TABLE example_decimal (
price DECIMAL(10,2),
rate DECIMAL(5,4)
);
3. 前导零设置
在MySQL中,整数类型可以指定显示宽度(如INT(5)
),但这只影响某些情况下的显示效果(如ZEROFILL
修饰符),不会影响实际存储的数值大小。例如:
CREATE TABLE t1 (
id INT(5) ZEROFILL
);
INSERT INTO t1 VALUES (42);
SELECT id FROM t1; -- 查询结果显示为 00042
注意:MySQL 8.0.17及以后版本已废弃了显示宽度,ZEROFILL
依然可用,但建议新项目避免依赖此特性。
4. 浮点数与定点数
- 浮点数(FLOAT, DOUBLE)
适合存储科学计算、非精确值。由于二进制浮点数的精度限制,可能出现舍入误差,不适合用于存储金额等需要精确计算的场景。 - 定点数(DECIMAL)
以字符串形式存储,精度高,适合存储金额、利率等对精度要求极高的数据。例如:
CREATE TABLE salary (
amount DECIMAL(10,2)
);
这里DECIMAL(10,2)
表示最多10位数字,其中2位小数。
5. 金额单位的最佳实践
在涉及金额、汇率等金融数据时,强烈建议使用DECIMAL类型,避免使用FLOAT或DOUBLE。原因如下:
- DECIMAL类型可确保精确存储和计算,避免因二进制浮点误差导致的金额不准确。
- 可根据实际需求设置小数位数,常见如
DECIMAL(18,2)
表示最大金额为18位数字,保留2位小数。
示例:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
total_amount DECIMAL(18,2) NOT NULL
);
6. 总结
- 整数类型适合存储计数、ID等离散值,选择时应根据数据范围选择合适的类型。
- 浮点数适合科学计算,不适合金额。
- 金额、利率等需精确计算的场景应使用DECIMAL类型。
- 避免依赖前导零和显示宽度,关注实际存储和业务需求。
通过合理选择MySQL数值类型,可以提升数据存储的准确性和系统的健壮性。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据