gpt4 book ai didi

ruby-on-rails - Rails Digest::UUID v5 (vs) Postgresql uuid-ossp v5

转载 作者:行者123 更新时间:2023-11-29 13:41:12 24 4
gpt4 key购买 nike

在使用 Rails Digest::UUID 和 Postgresql uuid-ossp 生成时,我得到了不同的 V5 UUID。

rails :

[58] pry(main)> Digest::UUID.uuid_v5('e90bf6ab-f698-4faa-9d0f-810917dea53a', 'e90bf6ab-f698-4faa-9d0f-810917dea53a')
=> "db68e7ad-332a-57a7-9638-a507f76ded93"

Postgresql uuid-ossp:

select uuid_generate_v5('e90bf6ab-f698-4faa-9d0f-810917dea53a', 'e90bf6ab-f698-4faa-9d0f-810917dea53a');
uuid_generate_v5
--------------------------------------
6c569b95-a6fe-5553-a6f5-cd871ab30178

会是什么原因呢?我认为当输入相同时两者应该生成相同的 UUID,但它是不同的!

最佳答案

似乎提出了一个补丁,以便可以显式启用 namespace 的工作字符串表示

  • The new behavior will be enabled by setting the config.active_support.use_rfc4122_namespaced_uuids option totrue.

但是,补丁是最新的,可能仍在测试中。人们可能会担心它会破坏东西。检查

https://github.com/rails/rails/issues/37681 https://github.com/rails/rails/pull/37682/files

同时,解决方法是打包命名空间字符串

ns=n.scan(/(\h{8})-(\h{4})-(\h{4})-(\h{4})-(\h{4})(\h{8})/).flatten.map { |s| s.to_i(16) }.pack("NnnnnN")

在你的例子中

irb(main):037:0> n='e90bf6ab-f698-4faa-9d0f-810917dea53a'
=> "e90bf6ab-f698-4faa-9d0f-810917dea53a"
irb(main):038:0> ns=n.scan(/(\h{8})-(\h{4})-(\h{4})-(\h{4})-(\h{4})(\h{8})/).flatten.map { |s| s.to_i(16) }.pack("NnnnnN")
=> "\xE9\v\xF6\xAB\xF6\x98O\xAA\x9D\x0F\x81\t\x17\xDE\xA5:"
irb(main):039:0> puts Digest::UUID.uuid_v5(ns, 'e90bf6ab-f698-4faa-9d0f-810917dea53a')
6c569b95-a6fe-5553-a6f5-cd871ab30178

关于ruby-on-rails - Rails Digest::UUID v5 (vs) Postgresql uuid-ossp v5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174609/

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