这张图片是淘宝API技术支持人员给提供的淘宝数据结构的截图, 这个是他们的订单ID字段的类型. 他们应该是oracle的.NUMBER类型 长度是22 但是实际上订单id长度目前在14位, 对应他这个订单ID字段, 我在mysql里面用bigint(22) 类型和长度来做ID的存储 有问题吗?有经验的童鞋们 帮忙分析一下.
这张图片是淘宝API技术支持人员给提供的淘宝数据结构的截图, 这个是他们的订单ID字段的类型. 他们应该是oracle的.NUMBER类型 长度是22 但是实际上订单id长度目前在14位, 对应他这个订单ID字段, 我在mysql里面用bigint(22) 类型和长度来做ID的存储 有问题吗?有经验的童鞋们 帮忙分析一下.
在mysql里面我应该用什么样的数据字段来做这个呢?
1,mysql里面用什么类型的字段来保存一个可能会变化长度 (变化的周期很长,很有可能14位的要用3年,然后升到15位,再升到16这样子,一直到20多位)的ID呢? 淘宝数据库现在是14位,他的oracle给的是number(22)2,后期如果我改变这个字段的数据类型,困难吗?会不会对数据造成影响?
所以如果业务能涨到那个份上 就提早用22好了2.困难,一旦数据量变大后,修改表结构是很吃力的事情。一般可以重新构造相同表结构表,然后导出数据到新表。然后删除原表,然后重命名新表为原表名...
对数据有影响否看你怎么改?
比如一个字符串,如果你本来是varchar(50) 后来你改小了,变成40 可能会丢失...
楼主可以计算一下你的系统什么时候会涨到这个数字,给个大概的时间长度?估计一下多少天。
================================================================================回复feixianxxx 大哥:提早用22位, 请问mysql里面如何用22位的int呢? 我目前还不知道.
你还是用varchar 的
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
For MySQL 5.0.3 and above: A packed ``exact'' fixed-point number. M is the total number of digits and D is the number of decimals. The decimal point and (for negative numbers) the '-' sign are not counted in M. If D is 0, values have no decimal point or fractional part. The maximum number of digits (M) for DECIMAL is 64. The maximum number of supported decimals (D) is 30. If UNSIGNED is specified, negative values are disallowed. If D is omitted, the default is 0. If M is omitted, the default is 10. All basic calculations (+, -, *, /) with DECIMAL columns are done with a precision of 64 decimal digits.
跟你说的int还是不一样的...int容量固定
FLOAT(size,d) 4=±38d.±7d
DOUBLE(size,d) 8=±308d.±15d
DECIMAL(size,d) ±65d.±30d