10

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

  1. 由于字符串的大小(即 uuid='a822ff2bff02461db45ddcd10a2de0c2'),我是否需要将其分解为多个“子字符串”。
  2. 我目前在 32 位架构上运行 PHP,因此由于 PHP_INT_MAX 大小(最大 0xFFFFFFFF),在 PHP 中转换它不起作用。我怀疑这对 MySQL 来说是同样的限制。
  3. 我不喜欢使用多个主键来解决这个问题,我宁愿使用字符串表示,即使这不是首选方法。

我可能认为这一切都是错误的,并且不反对阅读文档,因此可以接受示例或建议阅读作为回应。

4

3 回答 3

32

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

转换可以(并且可能应该)在 MySQL 而不是 PHP 中完成,因此无论您使用 32 位 PHP 客户端还是 64 位都无关紧要(双关语:P)

于 2013-04-20T17:22:50.990 回答
1

使用字符串类型,而不是整数。只有解决问题才能更好。

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

于 2013-04-20T17:04:45.853 回答
0

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

于 2015-03-02T15:28:16.050 回答