在表字段 id(编号)中,你们都是用什么类型?表会不会爆了

2014-08-08 15:00:31 +08:00
 dong3580
刚把id设为int类型,瞬间觉得不妥了。

Sql Server 中
int类型 从 -2^31 (-2,147,483,648) 到 2^31 - 1(2,147,483,647) 的整型数据(所有数字),
想到了一个很可怕的结局,如果用了int类型,超过了20亿条数据该怎么办?

表会爆炸么?
然后,程序全报错?
你们都是用什么类型。
4785 次点击
所在节点    Oracle
8 条回复
Livid
2014-08-08 15:06:43 +08:00
一些大型网站(比如 Twitter)确实已经遇到过这样的问题了,所以一种解决方法是用 64 位的 bigint。
Livid
2014-08-08 15:07:36 +08:00
假如你写了一个程序,抓取 Twitter 的信息,需要在数据库里存 tweet ID 的话,那个字段就必须是 64 位的 bigint
wingoo
2014-08-08 15:07:54 +08:00
根据你自己的规模,嫌小,用bigint足够你用
或者guid
ddzz
2014-08-08 15:09:26 +08:00
几年前我也纠结过,查了好多资料研究怎样把django和rails框架的主键设成bigint,后来才知道自己想多了。
lincanbin
2014-08-08 15:11:41 +08:00
我还想过用unsigned int(10)来存时间戳会不会爆掉,掐指一算,那也是一百年后的事了,我自己能不能活这么久还是两说。
qiayue
2014-08-08 15:12:33 +08:00
我现在文章表、帖子表、回复表等会一直增加的表统一都用 bigint
dong3580
2014-08-08 15:21:42 +08:00
@Livid
插入语句,将int改为bigint报错了:

[code]
insert into test(id,title,content)
values(12121231231314213213213123123,'2014年8月8日的事情','内容')
[/code]

将 expression 转换为数据类型 bigint 时出现算术溢出错误。

第一次要准备用这种类型,这个怎么转换,还是....

@wingoo
怕撞了啊,guid和md5都是32位的

@ddzz
提高兼容性嘛

@lincanbin
用时间戳当id,好浪费id啊,中间一堆int数都被浪费了,

@qiayue
你怎么插入数据库,或者查询出来呢?
查询出来用 Int64 表示么?
插入报错。。。
dong3580
2014-08-08 15:29:47 +08:00
惭愧,我弄错了,位数太长了。试了试18位不会报错,这样就足够了~~~
3ks

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/126777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX