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

时间:2016-01-04 06:43:14

标签: postgresql postgresql-9.3

我的下表中只有一列是idUUID类型。

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    

2 个答案:

答案 0 :(得分:3)

首先,你应该注意到在PostgreSQL中,UUID是一个128位的数字,并且是这样存储的(不是一个包含36个字符的字符串!)。我们正在讨论的是这类数据的输入和输出形式。

PostgreSQL manual说:

  

数据类型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);