建表规约

本规约遵循阿里开发手册中的建表规约,具体请参考阿里开发手册。

字段属性要求

1、当前开放的字段类型有:char、varchar、text、int、decimal、datetime、timestamp
2、double、float 暂不开放,可使用decimal代替
3、UNSIGNED 开关暂时未开放
4、int 默认长度值就是 11,最大可输入长度为10位,即使定义为 int(1) 依然等价于int(11)

char类型

char是定长字符串,如果在我们日常开发中能够确定某个参数存储的字符串长度几乎相等的,则应该使用char定长字符串类型。

说明: char的最大长度为255,在选用char作为字段类型的时候,先确认存储的字符串长度是否在 [1,255] 这个区间内。

varchar类型

varchar是可变长度字符串,不预先分配存储空间,长度不要超过5000个字符,如果长度存储大于此值,则应定义字段类型为text,独立出一张表,用主键来对应,避免影响其他字段的索引效率。

说明: varchar是可变长度字符串,并不是意味着它的长度可以随着你存储的字符串长度自动增长,而是它会根据你实际存储的字符串长度来进行存储,主要为了节省空间,它的最大的长度不会超过你定义的长度。
定义规则:
最大长度限制:5000
最小长度:1

decimal类型

小数类型decimal,一般表示为 decimal(M,D) (M>=D),整数位的长度为M-D,小数位的长度为D,max(M)=65,max(D)=30。deciaml默认长度为10且没有小数位。其实相当于decimal(10,0)。deciaml实际存储的值如果小数位超过D位,则会采用四舍五入的方法截取到D位。

注意: 我们禁止使用double和float类型来存储含小数的数值

说明:在存储时,float 和 double类型存在精度损失的问题,很可能在比较值的时,得不到正确的结果。如果存储的数据范围超过decimal的范围,那么建议将数据拆成整数和小数并分开存储。
定义规则:
M最大长度:65
D最大长度:30

int类型

我们在数据库定义int类型的时候是可以指定长度,这里的长度并不是指它的实际存储长度,而是显示长度。比如:当我们定义int(11),存储一个值为10086,并且设计UNSIGNED ZEROFILL(无符号填充零) 就会发现他会自动在10086的前面填充0,从而达到我们所说的11位。

说明: int类型的实际存储长度最终取决于它的最大值和最小值。
最大值: 2147483647(2^31-1)
最小值:-2147483648(-2^31)
定义规则:
小数位必须为0

text类型

text类型不可以有默认值,最大的长度为2^16-1(65535)。

定义规则:
最大长度:65535
最小长度:1

datetime/timestamp类型

在我们建表时,凡是涉及到创建时间(create_time)、更新时间(update_time)等有关时间的字段请选用datetime数据类型,按照 yyyy-MM-dd HH:mm:ss 格式来进行存储和展示。

定义规则:
datetime和timestamp最大的区别,其实是它们的显示范围。
datatime: 0000-00-00 00:00:00-9999-12-31 23:59:59
timestamp(UTC): 1970-01-01 00:00:01 - 2038-01-19 03:14:07
timestamp(UTC+8): 1970-01-01 08:00:01 - 2038-01-19 11:14:07
定义规则:
最大长度:6 精确到μs(微秒,百万分之一秒)
最小长度:0

double类型和float类型

注意:不建议使用double和float类型

定义double和float类型的格式为 double(M,D)| float(M,D),整数位的长度为
M-D (M>=D),max(M)=255,max(D)=30。按照银行家算法舍入计算。

说明:
银行家算法舍入计算的口诀:
四舍六入五凑偶
小于等于4则舍去
大于等于6则进一
5前为奇则进一
5前为偶,要看后面是否还有不为0的数,有则进一,无则舍去。
例如:
9.8249=9.82, 9.82671=9.83
9.8350=9.84, 9.8351 =9.84
9.8250=9.82, 9.82501=9.83
定义规则:
M的最大长度为:255
D的最大长度为:30

具体参考表:

字段类型参考表

类型名称 长度 长度设置说明 最大设置长度 最小设置长度 小数点最大设置值 小数点最小设置值 最大值 最小值
int 11 int类型的长度并不是代表实际最大长度为11,而是字符的显示宽度,当设置为无符号填充零(UNSIGNED ZEROFILL),并且没有达到显示宽度时会自动填充0,从而达到显示宽度为11。而int的长度最终取决于它的最小值(-2^31)和最大值(2^31-1)。 255 1 - - 2147483647(2^31-1) -2147483648(-2^31)
decimal 默认长度10,没有小数位 decimal(M,D),整数位的长度为M-D(M>=D),小数位可以超过D位,超过的保存后会四舍五入截取到D位。max(M)=65,max(D)=30。 30 1 30 0 - -
double - double(M,D),整数位的长度为M-D(M>=D),max(M)=255,max(D)=30采用银行家算法进行舍入计算。 255 1 30 0 - -
float - float(M,D),整数位的长度为M-D(M>=D),max(M)=255,max(D)=30采用银行家算法进行舍入计算。 255 1 30 0 - -
char 255 char类型的长度是固定的,最大长度为255。 255 1 - - - -
varchar 最大可达65535 导致实际应用中varchar类型长度限制的是每列定义的长度之和,当每列定义的长度之和如果超过16383,应该采用text。本文规定超过5000,就要换为text。 5000 1 - - - -
text 2^16-1(65535) text类型的最大长度为2^16-1(65535),text类型不可以有默认值 65535 1 - - - -
datetime 默认长度为0 当datetime类型填写的长度为0时支持的时间范围为(0000-00-00 00:00:00-9999-12-31 23:59:59)最大长度为6表示可以精确到时间范围为(0000-00-00 00:00:00.000000-9999-12-31 23:59:59.999999),在本工具查看数据,仅支持(yyyy-MM-dd HH:mm:ss)的显示格式 6 0 - - - -
timestamp 默认长度为0 ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC (UTC+8) ‘1970-01-01 08:00:01’ to ‘2038-01-19 11:14:07’ 6 0 - - - -
文档更新时间: 2021-05-12 17:49   作者:姚连洲