在PostgreSQL中存储评分应使用何种数据类型?
解决PostgreSQL评分字段的数据类型选择问题
为什么smallint(6)在PostgreSQL不生效
PostgreSQL里的整数类型(包括smallint)不支持类似MySQL的括号指定显示宽度,smallint(6)会被直接解析为普通的smallint,它的固定范围是 -32768 到 32767,括号里的数字没有实际作用。
评分字段的类型选择建议
根据评分的实际场景,推荐以下几种类型:
1. 整数类(适合固定分值的评分,比如1-5星、0-10分)
smallint:如果评分范围在-32768到32767之间(绝大多数评分场景都满足),直接用smallint就足够,无需加括号。integer:如果未来可能扩展评分范围(比如0-100分甚至更高),用integer更稳妥,范围是-2147483648到2147483647,完全覆盖常见评分需求。
2. 小数类(适合带小数的评分,比如4.5分、8.9分)
numeric(precision, scale):比如numeric(3,1)可以存储0.0到99.9的评分,精度和小数位数完全可控,适合需要精确小数的场景。real/double precision:如果对精度要求不高(比如允许微小的浮点误差),可以用这两种浮点类型,存储范围更大,但可能存在精度丢失问题。
3. 自定义枚举类型(适合固定选项的评分,比如星级)
如果评分是固定的几个选项(比如1星到5星),可以创建枚举类型:
CREATE TYPE rating_star AS ENUM ('1', '2', '3', '4', '5');
之后字段就可以用rating_star类型,能强制限制输入的有效值,避免非法评分。
内容的提问来源于stack exchange,提问作者pavicevic
相关产品推荐
相关产品推荐

