数据库常用类型字段设计规范

5,841 阅读2分钟

Mysql 数据库内置的数据类型

decimal

存储小数,必须使用 decimal, 不要用 floatdouble等其他类型,否则可能会出现精度丢失

decimal (M,N)

  • M 表示有效数字数的位数。(注意不是整数的位数,例如 -123.45 中 M=5 而不是3)
  • N 表示小数点后的位数
  • 整数的位数为 M-N
  • 存储占用 M+2 bit,因为要包含正负号和小数点

bigint

  • 取值范围 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807),可以表示正负十亿亿级别的数值
  • 储存空间 64 bit

Oracle 数据库内置的数据类型

NUMBER

数字类型,可以指定它的精度和小数位数。

格式 NUMBER (precision, scale)

  • precision 表示有效数字的位数(注意不是整数的位数),最大38
  • scale 表示小数位数

INTEGER

整型类型,小数位数为 0,INTEGER 属于 NUMBER 的子类型,相当于 NUMBER (P,0)

金融类字段

金额类字段

根据阿里巴巴 java 开发规范,“任何货币金额,均以最小货币单位且整型类型来进行存储”,因此要使用长整形

  • Mysql : 建议 bigint为最小单位存储时,最大可以表示正负千万亿级别的金额
  • Oracle : 建议 INTEGER 小数保留到,整数 16 位,最大可以表示千万亿级别的金额

利率类字段

根据行业习惯,存储时,利率保留到小数点后6位,展示时,利率只展示到小数点后4位

  • Mysql : 建议 DECIMAL (10,6) ,小数点后保留 6 位,整数 4 位,
  • Oracle : 建议 NUMBER (10,6) ,小数点后保留 6 位,整数 4 位,

坐标类字段

二位坐标-经纬度

推荐做法

经度

  • Mysql : DECIMAL (11,8)
  • Oracle : NUMBER (11,8)

维度

  • Mysql : DECIMAL (10,8)
  • Oracle : NUMBER (10,8)

经度取值范围为 [0,180],纬度的取值范围为 [0,90],因此经度比纬度是要多存一位

参考资料

三维坐标