lau*_*ent 4 postgresql encoding uuid
我发现许多 Web 服务(我想到的是 Stripe)对其 UUID 使用特殊的编码。它们将使用特殊的字母表(通常是小写、大写字母和数字)进行编码,而不是a44521d0-0fb8-4ade-8002-3385545c3318
通常的编码,这会产生类似mhvXdrZT4jP5T8vBxuvm75
. 两者都表示相同的 UUID,但编码不同。
我想知道这些服务如何处理这些 ID?特别是 Postgres 是否可以在数据库中直接使用这种短 ID 编码?(换句话说,任何选择或插入都将使用短 ID)
或者将这些短 ID 直接作为文本保存在数据库中是否有意义?
我找不到关于此的太多信息,所以我不确定这里的最佳实践是什么。
您从客户端(例如 psql 或 pgAdmin)传递到数据库的文本不是uuid 。它只是 uuid 的文本表示形式。同样,您在客户端中读取的十六进制字符串也不是uuid - 它是 uuid 的相同文本表示形式。
\n\n\n...将这些短 ID 直接作为文本保存在数据库中是否有意义?
\n
否。使用suuid
进行数据库工作的数据类型uuid
;尽可能靠近客户处理特殊文本格式。在文档页面上,您将找到临时工作的默认允许输入字符串格式的采样。值得注意的评论是...
\n\nPostgreSQL 还接受以下替代形式的输入:使用大写数字、用大括号括起来的标准格式、省略部分或全部连字符、在任何一组四位数字后添加连字符。例子有:
\n
但
\n\n\n输出始终采用标准形式。
\n
如果您真的非常希望数据库对您的 uuid 进行 Base64 编码,您可以使用函数encode
和uuid_send
(未记录),如下所示
select encode(uuid_send(\'a44521d0-0fb8-4ade-8002-3385545c3318\'::uuid),\'base64\');\n
Run Code Online (Sandbox Code Playgroud)\n请注意,这不会更改 uuid 本身,并且您仍然不应该将uuid 存储为文本(或 bytea,或任何“聪明”的东西)。将您的 uuid 存储为 uuid。在应用层进行有趣的字符串转换。
\n至于将 base64 字符串发送到数据库中,然后将其与存储的 uuid 类型进行比较,这是一个已经在这里回答和解释的转换问题
\nselect substring(decode(\'pEUh0A+4St6AAjOFVFwzGA==\',\'base64\')::text from 3)::uuid\n
Run Code Online (Sandbox Code Playgroud)\n另请注意,OP 中给出的示例 uuid(经典形式)似乎与给出的示例 base64 字符串不对应(仅使用https://www.fileformat.info/tool/guid-base64.htm)。不确定那里是否发生了更聪明的事情,或者我错过了有关转换协议的一些内容,仅供参考 \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf
\n 归档时间: |
|
查看次数: |
6330 次 |
最近记录: |