PostgreSQL 9.3:如何将大写 UUID 插入表中

MAK*_*MAK 6 postgresql postgresql-9.3

我有下表,其中只有 1 列,其id类型为UUID

桌子uuidtest

create table uuidtest
(
id uuid
);
Run Code Online (Sandbox Code Playgroud)

插入

我通过使用生成了 uuid uuid_generate_v4(),并将其大写并将其插入到表中。

尝试1:

insert into uuidtest values('{4B36AFC8-5205-49C1-AF16-4DC6F96DB982}');
Run Code Online (Sandbox Code Playgroud)

尝试2:

insert into uuidtest values('4B36AFC8-5205-49C1-AF16-4DC6F96DB982');
Run Code Online (Sandbox Code Playgroud)

现在看结果:

select * from uuidtest;
Run Code Online (Sandbox Code Playgroud)

输出

id
uuid
-------------------------------------
4b36afc8-5205-49c1-af16-4dc6f96db982
4b36afc8-5205-49c1-af16-4dc6f96db982
Run Code Online (Sandbox Code Playgroud)

我也尝试过更新:

update uuidtest
set id = upper(id::text)::uuid
Run Code Online (Sandbox Code Playgroud)

但是:输出保持不变:

id
uuid
-------------------------------------
4b36afc8-5205-49c1-af16-4dc6f96db982
4b36afc8-5205-49c1-af16-4dc6f96db982    
Run Code Online (Sandbox Code Playgroud)

Ren*_*nzo 6

首先,您应该注意,在 PostgreSQL 中,UUID 是一个 128 位数字,并且按此存储(而不是作为 36 个字符的字符串!)。我们讨论的是这类数据的输入和输出形式。

PostgreSQL 手册说:

数据类型 uuid 存储 RFC 4122、ISO/IEC 9834-8:2005 和相关标准定义的通用唯一标识符 (UUID)。

...

PostgreSQL 还接受以下替代形式的输入:使用大写数字、用大括号括起来的标准格式、省略部分或全部连字符、在任何一组四位数字后添加连字符。

...

输出始终采用标准形式。

RFC 4122说:

每个字段都被视为整数,并将其值打印为以零填充的十六进制数字字符串,最高有效数字在前。十六进制值“a”到“f”作为小写字符输出,并且输入时不区分大小写。

换句话说,为了遵循标准,该值始终以小写形式打印。

当然,如果你想产生大写字母的结果,你可以使用类似:

select upper(id::TEXT) from uuidtest;
Run Code Online (Sandbox Code Playgroud)

  • 为了补充这个答案,如果您需要以大写形式“显示”“uuid”,您可以在应用程序层内执行此操作。 (2认同)
  • 该值存储为 128 位数字,而不是字符串!查看更新的答案。 (2认同)