我的下表中只有一列是id
,UUID
类型。
表:uuidtest
create table uuidtest
(
id uuid
);
插入:
我使用uuid_generate_v4()
生成了uuid,并且还使用大写
并将其插入表格。
Try1:
insert into uuidtest values('{4B36AFC8-5205-49C1-AF16-4DC6F96DB982}');
Try2:
insert into uuidtest values('4B36AFC8-5205-49C1-AF16-4DC6F96DB982');
现在看结果:
select * from uuidtest;
Ouptput :
id
uuid
-------------------------------------
4b36afc8-5205-49c1-af16-4dc6f96db982
4b36afc8-5205-49c1-af16-4dc6f96db982
我也尝试过更新:
update uuidtest
set id = upper(id::text)::uuid
但是:输出保持不变:
id
uuid
-------------------------------------
4b36afc8-5205-49c1-af16-4dc6f96db982
4b36afc8-5205-49c1-af16-4dc6f96db982
答案 0 :(得分:3)
首先,你应该注意到在PostgreSQL中,UUID是一个128位的数字,并且是这样存储的(不是一个包含36个字符的字符串!)。我们正在讨论的是这类数据的输入和输出形式。
数据类型uuid存储RFC 4122,ISO / IEC 9834-8:2005及相关标准定义的通用唯一标识符(UUID)。
...
PostgreSQL还接受以下替代输入形式:使用大写数字,括号括起的标准格式,省略部分或全部连字符,在任意四个数字组后添加连字符。
...
输出始终为标准格式。
RFC 4122说:
每个字段都被视为一个整数,其值打印为a 零填充十六进制数字字符串,最重要 先数字。十六进制值“a”到“f”输出为 小写字符,输入时不区分大小写。
换句话说,要遵循标准,值始终打印为小写。
当然,如果你想用大写字母产生结果,你可以使用类似的东西:
select upper(id::TEXT) from uuidtest;
答案 1 :(得分:0)
是的,没错。如果插入Postgres,它将强制值变为小写。我尝试的有点不同,可能并不适用于每个人,即;可能不实用。如果你想在Postgres中使用大写UUID,那么使用ID作为这个:
String id = java.util.UUID.randomUUID().toString().toUpperCase();
Snipped picture to show IDs in CAPS
另外,如果这没用,你必须尝试上面提到的其他人: DB生成的UUID在较低的位置:
select uuid_generate_v4();
在UPPER:
select UPPER(uuid_generate_v4()::text);