gpt4 book ai didi

mysql - 用于 PostGres 的 UUID SHORT()

转载 作者:行者123 更新时间:2023-11-29 01:36:57 27 4
gpt4 key购买 nike

您好,我有一个基于 MYSQL 的开发,由于商业软件的许可成本,我正在考虑迁移到 PostGres。

在我的 MYSQL 中,我有多个表,我依赖于使用 UUID_SHORT() 函数作为这些表中的主键。见链接:Mysql UUID_SHORT Info

PostGres有没有类似UUID_SHORT函数的函数?我正在寻找一个 uniqiue ID,对序列不感兴趣。还有一些基于系统时间的东西,比如 UUID_SHORT 会很棒。下面还有我在 PHP 中使用的类函数,当我想为 MYSQL 中的主键插入获取唯一 ID 时。

感谢任何意见,因为这将是转移或不转移到 PostGres 的主要原因。

function getUniqueId(){
//return unique id

$temp_id = strval(uniqid());
$temp = $this->conn->prepare('CREATE TEMPORARY TABLE tempId (temp_id VARCHAR(30) PRIMARY KEY, id BIGINT UNSIGNED)');
$temp->execute();
$temp = $this->conn->prepare('INSERT INTO tempId(temp_id, id) VALUES(:temp_id, UUID_SHORT())');
$temp->bindParam(':temp_id', $temp_id, PDO::PARAM_STR);
$temp->execute();
$temp = $this->conn->prepare('SELECT id FROM tempId WHERE temp_id = :temp_id ');
$temp->bindParam(':temp_id', $temp_id, PDO::PARAM_STR);
$temp->execute();
$tempResult= $temp->fetchAll(PDO::FETCH_ASSOC);
$temp = $this->conn->prepare('DROP TEMPORARY TABLE tempId');
$temp->execute();
$temp_id = $tempResult[0]['id'];
return $temp_id;
}

最佳答案

PostgreSQL 有一个 extension called "uuid-ossp"有 4 个算法,每个算法实现官方 UUID 算法之一,第 4 个算法是随机的 122 位(其余 6 位将其标识为版本 4 UUID)。所有这些都返回一个 16 字节的 UUID 值。

(请注意,根据定义,64 位值根本不是 UUID。您提供的 MySQL 引用资料基本上已经解释了它:只有在您不违反一组规则的情况下才能保证唯一。也许他们应该称它为“LUID”,因为它绝对不是普遍独特的。这种调整(采用定义的标准并赋予它自己的扭曲)尝起来像微软的邪恶。但我离题了.)

在 PostgreSQL 中:

CREATE EXTENSION "uuid-ossp";

安装扩展后,您可以使用 uuid 数据类型:

CREATE TABLE my_table (
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
...
END;

然后就可以在表中插入一行,一次性取出主键:

INSERT INTO my_table (...) VALUES (...)
RETURNING id;

上面的语句将返回 uuid 值作为 16 字节的二进制值,不确定您将如何在 PHP 中管理它。

您也可以只生成一个 uuid 值而不插入一行:

SELECT uuid_generate_v4();

关于mysql - 用于 PostGres 的 UUID SHORT(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39443176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com