相关疑难解决方法(0)

替换MySQL的UUID版本1功能?

上下文

Web应用程序,PHP 5,MySQL 5.0.91

问题

我最近从使用自动递增的整数切换到UUID作为我的一些表的主键.通过MySQL的UUID()函数生成UUID时,它们彼此非常相似:

| uuid                                 |
----------------------------------------
| 1e5988da-afec-11e1-9877-5464f7aa6d24 |
| 408092aa-afad-11e1-9877-5464f7aa6d24 |
  ^------^   ^^
  1      8   11-12
Run Code Online (Sandbox Code Playgroud)

如您所见,只有前8个字符和第11个和第12个字符不同.据我所知,UUID版本1使用时间戳和硬件MAC地址来生成UUID.但是,由于这些相似之处(以及在我的情况下MAC地址永远不会改变的事实),我对使用版本1犹豫不决.此外,如果MAC地址永远不会改变,大多数UUID都是无用的并且浪费空间.

我的自定义UUID功能

作为一个实验,我用PHP编写了一个自定义UUID生成器:

public static function GenerateUUID()
{
    return
    substr(sha1(Account::GetUsername() . Account::GetUserID()), 18, 8) . "-" .
    substr(md5(time()), rand() % 28, 4) . "-" . 
    substr(md5(date("Y")), rand() % 28, 4) . "-" . 
    substr(sha1(rand()), 20, 4) . "-" . 
    substr(sha1(rand() % PHP_INT_MAX), 17, 12);
}
Run Code Online (Sandbox Code Playgroud)

结果样本:

| uuid                                 |
----------------------------------------
| 574d18c2-5080-bac9-5597-45435f363ea1 |
| 574d18c2-30d4-8b5b-4ffd-001744d3d287 |
Run Code Online (Sandbox Code Playgroud)

这里,前8个字符对于同一用户是相同的.这是有意的,但不是必需的. …

php mysql uuid

12
推荐指数
2
解决办法
3979
查看次数

标签 统计

mysql ×1

php ×1

uuid ×1