MySQL/MariaDB中TINYINT是否支持小数?若不支持该用何种类型替代?
嘿,这个问题其实挺基础但容易踩坑的,我来给你讲明白~
TINYINT能不能存小数?
完全不行。TINYINT是MySQL/MariaDB里的整数类型,不管是有符号(范围 -128 到 127)还是无符号(0 到 255)版本,它的设计目标就是只存储整数。如果硬往里面插小数,数据库要么自动截断小数部分(比如插3.9会变成3),要么在严格SQL模式下直接报错,总之得不到你想要的小数结果。
适合存小数的替代类型
根据你的精度需求,推荐这几种常用类型:
- DECIMAL/NUMERIC:这是最靠谱的精确小数类型,不会出现浮点精度丢失的问题。比如定义成
DECIMAL(6,2),就表示总共6位数字,其中2位是小数,能存从-9999.99到9999.99的数值。涉及金额、财务计算这类对精度要求高的场景,一定要选它。 - FLOAT:单精度浮点类型,适合对精度要求不高的场景(比如统计估算、科学数据),但要注意它存在精度丢失风险——比如
0.1存进去后实际存储的是一个接近0.1的近似值,不是精确值。 - DOUBLE:双精度浮点类型,精度比FLOAT更高,但同样有浮点近似的问题,适合需要更大数值范围且能接受微小误差的场景。
另外提个小建议:如果是存储百分比类的数据,DECIMAL(5,2) 就足够用了;如果需要超高精度,DECIMAL的参数可以调整,比如DECIMAL(10,5)能存5位小数的数值。
内容的提问来源于stack exchange,提问作者One SNapp
相关产品推荐
相关产品推荐

