处理大型(UUID)作为MySQL表主键的最佳方法

时间:2013-04-20 17:03:44

标签: php mysql hex decimal

我有一个UUID字符串,我想用作我的MySQL表主键,UUID是一个32个字符的十六进制字符串(在' - '字符被剥离后)。由于最好使用数字列(int)作为数据库中的主键,我想将其转换为整数,但不确定处理它的最佳方法。

  1. 由于字符串的大小(即.uuid ='a822ff2bff02461db45ddcd10a2de0c2'),我是否需要将其分解为多个'子字符串'。
  2. 我目前在32位架构上运行PHP,因此在PHP中转换它将无法正常工作,因为PHP_INT_MAX大小(最大0xFFFFFFFF)。而且我怀疑这对MySQL来说也是一样的限制。
  3. 我不喜欢多个主键的想法作为解决方法,我宁愿使用字符串表示,即使这不是首选方法。
  4. 我可能会认为这一切都是错误的,并且不反对阅读文档,所以无论是示例还是建议阅读作为回应都是可以接受的。

3 个答案:

答案 0 :(得分:26)

对于大多数情况,最好将UUID / GUID存储为BINARY(16)。请参阅这些相关的StackOverflow问题:

转换可以(也可能应该)在MySQL而不是PHP中完成,所以无论你是使用32位PHP客户端还是64位都不重要(双关语:P)

答案 1 :(得分:1)

使用字符串类型,而不是整数。如果能解决问题,那就更好了。

如果您真的关心查找速度,请使用合成(自动增量)主键。您可以在UUID列上放置一个唯一约束,并仅使用它一次查找随后用于连接等的合成密钥。

答案 2 :(得分:0)

这也取决于存储引擎。 TokuDB应该处理所有这些问题。