【问题标题】:MySQL is unable to differentiate between large unique valuesMySQL 无法区分大的唯一值
【发布时间】:2011-12-25 08:56:28
【问题描述】:

我正在构建一个 facebook 应用程序,该应用程序通过开放图访问用户的朋友,我需要将它们包含在数据库中。

现在这里的数据库包含用户idname 和我的应用所需的其他一些信息。为了防止数据库中有多个条目,我使用 phpMyAdmin 将用户 ID 分配为unique。现在这适用于许多值,但同时它却失败了。

假设根据 mysql 唯一的值是:

51547XXXX
52160XXXX
52222XXXX
52297XXXX
52448XXXX

但是如果id变成了

5154716XX
5154716XX
or
5216069673X
521606903XX

然后它将其视为相似并因此丢弃其中一个。

结果,假设我将我的朋友列表输入到表中,那么它应该有 830 条记录,如果我不使用唯一约束,那就是我得到的值。

但是一旦unique 被激活,我只会得到 375 这意味着 455 条记录被丢弃,考虑到它们与以前的数据相同..

我能想到的解决方案是,先用php比较数据,然后将它们记录到数据库中,但是查询那么多,需要很长时间。谷歌无法回答这个问题,不知道为什么.. :(

【问题讨论】:

  • 假设 X 代表什么?
  • 该表是如何定义的(该列的数据类型)?
  • @Dagon:X代表任意整数
  • @Mat: 数据类型为 INT,大小为 64

标签: php mysql facebook unique


【解决方案1】:

Facebook 用户 ID are too big 适合 MySQL 的 INT 类型(32 位)。您需要使用 64 位的 BIGINT 类型,因此可以处理 facebook 使用的 ID 范围。

【讨论】:

  • 这似乎成功了。谢谢。顺便说一句,MySQL 将其视为唯一的准确度是多少?对于普通 int 和 bigint?
  • 普通整数是有符号的 32 位,你可以得到通常的 2^31-1。 Bigints 是 signet 64 位,因此您最多可以得到 2^63-1
猜你喜欢
  • 2017-04-15
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多