<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>UUID on 最后的DBA</title><link>https://lastdba.com/tags/uuid/</link><description>Recent content in UUID on 最后的DBA</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><copyright>© 2026 liuzhilong62</copyright><lastBuildDate>Fri, 29 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lastdba.com/tags/uuid/index.xml" rel="self" type="application/rss+xml"/><item><title>UUIDv4和v7两篇精彩文章-碰撞和性能</title><link>https://lastdba.com/2026/05/29/uuidv4%E5%92%8Cv7%E4%B8%A4%E7%AF%87%E7%B2%BE%E5%BD%A9%E6%96%87%E7%AB%A0-%E7%A2%B0%E6%92%9E%E5%92%8C%E6%80%A7%E8%83%BD/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://lastdba.com/2026/05/29/uuidv4%E5%92%8Cv7%E4%B8%A4%E7%AF%87%E7%B2%BE%E5%BD%A9%E6%96%87%E7%AB%A0-%E7%A2%B0%E6%92%9E%E5%92%8C%E6%80%A7%E8%83%BD/</guid><description>&lt;blockquote&gt;&lt;p&gt;素材来源：&lt;a href="https://news.ycombinator.com/item?id=48060054" target="_blank" rel="noreferrer"&gt;HN UUID v4 碰撞帖&lt;/a&gt;、&lt;a href="https://dev.to/umangsinha12/postgresql-uuid-performance-benchmarking-random-v4-and-time-based-v7-uuids-n9b" target="_blank" rel="noreferrer"&gt;dev.to UUID Benchmark&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;AI率99%&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;太长不看
 &lt;div id="太长不看" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%aa%e9%95%bf%e4%b8%8d%e7%9c%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;UUID v4 碰撞了——HackerNews 上有人真的撞了。原因是软件栈的 bug，不是数学。v4 和 v7 在碰撞安全性上没本质区别，差异在索引性能：v7 有时序，B-tree 更紧凑，写入快 35%、索引小 22%。你的 UUID v4 大概率没事，但如果你追求索引性能，换 v7 有实惠。&lt;/p&gt;</description><content:encoded>&lt;blockquote&gt;&lt;p&gt;素材来源：&lt;a href="https://news.ycombinator.com/item?id=48060054" target="_blank" rel="noreferrer"&gt;HN UUID v4 碰撞帖&lt;/a&gt;、&lt;a href="https://dev.to/umangsinha12/postgresql-uuid-performance-benchmarking-random-v4-and-time-based-v7-uuids-n9b" target="_blank" rel="noreferrer"&gt;dev.to UUID Benchmark&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;AI率99%&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;太长不看
 &lt;div id="太长不看" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%aa%e9%95%bf%e4%b8%8d%e7%9c%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;UUID v4 碰撞了——HackerNews 上有人真的撞了。原因是软件栈的 bug，不是数学。v4 和 v7 在碰撞安全性上没本质区别，差异在索引性能：v7 有时序，B-tree 更紧凑，写入快 35%、索引小 22%。你的 UUID v4 大概率没事，但如果你追求索引性能，换 v7 有实惠。&lt;/p&gt;

&lt;h3 class="relative group"&gt;UUID v4 碰撞事故
 &lt;div id="uuid-v4-碰撞事故" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#uuid-v4-%e7%a2%b0%e6%92%9e%e4%ba%8b%e6%95%85" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;HackerNews 上有个帖子火了——&lt;a href="https://news.ycombinator.com/item?id=48060054" target="_blank" rel="noreferrer"&gt;Ask HN: We just had an actual UUID v4 collision&amp;hellip;&lt;/a&gt;，479 赞 347 评论。&lt;/p&gt;
&lt;p&gt;发帖人的原话：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I know what you&amp;rsquo;re thinking&amp;hellip; and I still can&amp;rsquo;t believe it, but&amp;hellip; This morning, our database flagged a duplicate UUID (v4).&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;不是 double-insert 的 bug，不是代码写了两遍。库里只有 ~15,000 条记录，用 npm 的 &lt;code&gt;uuid&lt;/code&gt; 包生成 &lt;code&gt;uuidv4()&lt;/code&gt;，两个不同时间创建的行撞了同一个 UUID：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;b6133fd6-70fe-4fe3-bed6-8ca8fc9386cd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;UUID v4 碰撞的概率是多少？122 位随机位，2^122 ≈ 5.3×10^36 种可能，15,000 条记录下碰撞概率约 2×10^-29。理论上&amp;quot;不可能&amp;quot;。&lt;/p&gt;
&lt;p&gt;但它发生了。&lt;/p&gt;

&lt;h4 class="relative group"&gt;原因一：熵源不可靠
 &lt;div id="原因一熵源不可靠" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8e%9f%e5%9b%a0%e4%b8%80%e7%86%b5%e6%ba%90%e4%b8%8d%e5%8f%af%e9%9d%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;HN 最高赞评论（jandrewrogers）：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;UUIDv4 的安全性依赖高质量熵源。硬件缺陷、软件 bug、对&amp;quot;高质量熵&amp;quot;的误解，都会让这个假设失效。检测熵源故障很贵，所以没人检查——直到撞了。&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;UUID v4 在高可靠系统中被&lt;strong&gt;明确禁止&lt;/strong&gt;，原因是无法验证熵源质量。&lt;/p&gt;

&lt;h4 class="relative group"&gt;原因二：npm uuid 包有已知 bug
 &lt;div id="原因二npm-uuid-包有已知-bug" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8e%9f%e5%9b%a0%e4%ba%8cnpm-uuid-%e5%8c%85%e6%9c%89%e5%b7%b2%e7%9f%a5-bug" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;uuid npm 包的 README 自己都在警告：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;This module may generate duplicate UUIDs when run in clients with deterministic random number generators, such as Googlebot crawlers.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;更严重的是，它的 &lt;code&gt;rng()&lt;/code&gt; 函数内部有全局可变状态。一个评论者指出：调用 &lt;code&gt;rng()&lt;/code&gt; 然后把结果发出去，等于&lt;strong&gt;覆盖了别人的随机数而且你能猜到它&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;相关 commit：&lt;a href="https://github.com/uuidjs/uuid/commit/91805f665c38b691ac2cbd" target="_blank" rel="noreferrer"&gt;91805f665c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;社区建议：用 Node.js 内置的 &lt;code&gt;crypto.randomUUID()&lt;/code&gt;，别用 npm uuid 包。&lt;/p&gt;

&lt;h4 class="relative group"&gt;原因三：Linux 内核 /dev/random 竞态
 &lt;div id="原因三linux-内核-devrandom-竞态" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8e%9f%e5%9b%a0%e4%b8%89linux-%e5%86%85%e6%a0%b8-devrandom-%e7%ab%9e%e6%80%81" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;另一个评论：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;我在分布式系统的浸泡测试里碰到了 dup UUID。排查很久发现是 Linux 内核的一个竞态 bug——多处理器系统上，两个进程同时读 /dev/random，极低概率（~百万分之一）拿到相同的字节。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 class="relative group"&gt;原因四：Go 的 UUID 库不检查返回值
 &lt;div id="原因四go-的-uuid-库不检查返回值" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8e%9f%e5%9b%a0%e5%9b%9bgo-%e7%9a%84-uuid-%e5%ba%93%e4%b8%8d%e6%a3%80%e6%9f%a5%e8%bf%94%e5%9b%9e%e5%80%bc" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;blockquote&gt;&lt;p&gt;早期 Go UUID 库调用随机数函数时，不检查返回值长度。&amp;ldquo;请求 N 字节，返回了 3 字节&amp;quot;的情况在大部分硬件上不出现，所以没人检查，直到上生产环境撞了成千上万个重复 UUID。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 class="relative group"&gt;原因五：AMD CPU RNG 的历史缺陷
 &lt;div id="原因五amd-cpu-rng-的历史缺陷" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8e%9f%e5%9b%a0%e4%ba%94amd-cpu-rng-%e7%9a%84%e5%8e%86%e5%8f%b2%e7%bc%ba%e9%99%b7" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;AMD 某些 CPU 的内置随机数生成器曾经有问题。VM 环境还会&amp;quot;虚拟化掉&amp;quot;熵——虚拟机的时间源和熵源都可能退化。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;v4 和 v7 在碰撞安全性上没有本质区别，差异在前 48 位——v4 是随机数，v7 是时间戳。时序源出问题的情况你基本碰不到，随机源出问题的概率同样极低。HN 那个帖子是个有趣的特例，知道极少数人遇到了就行，不需要因此怀疑自己系统里的 UUID v4。&lt;/p&gt;
&lt;p&gt;选 v4 还是 v7，真正该看的不是碰撞，是&lt;strong&gt;索引性能&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 class="relative group"&gt;UUID v7 在 PG 16 中的性能对比
 &lt;div id="uuid-v7-在-pg-16-中的性能对比" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#uuid-v7-%e5%9c%a8-pg-16-%e4%b8%ad%e7%9a%84%e6%80%a7%e8%83%bd%e5%af%b9%e6%af%94" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;UUID v7 比 v4 在 PostgreSQL 里有一个实打实的优势：&lt;strong&gt;时序聚簇，B-tree 更友好&lt;/strong&gt;。v4 膨胀 v7 也能膨胀，区别只是 v7 的前 48 位有时序，insert 集中在 B-tree 右侧，页分裂少。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/umangsinha12/postgresql-uuid-performance-benchmarking-random-v4-and-time-based-v7-uuids-n9b" target="_blank" rel="noreferrer"&gt;Umang Sinha 的 benchmark&lt;/a&gt; 在 PG 16 Docker 容器（8 核 16GB NVMe）上做了严格的对比测试。&lt;/p&gt;

&lt;h4 class="relative group"&gt;测试条件
 &lt;div id="测试条件" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%b5%8b%e8%af%95%e6%9d%a1%e4%bb%b6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt; uuid_v4_test (id UUID &lt;span style="color:#66d9ef"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;KEY&lt;/span&gt;, payload TEXT);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt; uuid_v7_test (id UUID &lt;span style="color:#66d9ef"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;KEY&lt;/span&gt;, payload TEXT);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;参数&lt;/th&gt;
 &lt;th&gt;值&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;数据量&lt;/td&gt;
 &lt;td&gt;1000 万行/表&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;批次&lt;/td&gt;
 &lt;td&gt;每批 1 万行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;客户端&lt;/td&gt;
 &lt;td&gt;Go + pq 驱动&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UUID 预生成&lt;/td&gt;
 &lt;td&gt;在内存中生成好，不计时&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;h4 class="relative group"&gt;性能结果
 &lt;div id="性能结果" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%80%a7%e8%83%bd%e7%bb%93%e6%9e%9c" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;指标&lt;/th&gt;
 &lt;th&gt;UUID v4&lt;/th&gt;
 &lt;th&gt;UUID v7&lt;/th&gt;
 &lt;th&gt;提升&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;写入 1000 万行&lt;/td&gt;
 &lt;td&gt;5 分 35 秒&lt;/td&gt;
 &lt;td&gt;3 分 38 秒&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;35% 更快&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;表+索引总大小&lt;/td&gt;
 &lt;td&gt;3618 MB&lt;/td&gt;
 &lt;td&gt;3443 MB&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;5% 更小&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;B-tree 索引大小&lt;/td&gt;
 &lt;td&gt;776 MB&lt;/td&gt;
 &lt;td&gt;602 MB&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;22% 更小&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;单点查询&lt;/td&gt;
 &lt;td&gt;0.167 ms&lt;/td&gt;
 &lt;td&gt;0.038 ms&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;4.4 倍&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;范围扫描&lt;/td&gt;
 &lt;td&gt;8.283 ms&lt;/td&gt;
 &lt;td&gt;3.791 ms&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;2.2 倍&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;h4 class="relative group"&gt;为什么差这么多
 &lt;div id="为什么差这么多" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e5%b7%ae%e8%bf%99%e4%b9%88%e5%a4%9a" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;

 


&lt;img src="https://lastdba.com/img/uuid-v4-structure.png" alt="UUID v4 bit structure" /&gt;&lt;/p&gt;
&lt;p&gt;

 


&lt;img src="https://lastdba.com/img/uuid-v7-structure.png" alt="UUID v7 bit structure" /&gt;&lt;/p&gt;
&lt;p&gt;UUID v4 是完全随机的。新插入的 UUID 在 B-tree 索引里随机分布，导致大量页分裂（page split），索引碎片化严重。UUID v7 前 48 位是毫秒级时间戳，新生成的 UUID 天然有序——写入集中在 B-tree 的右侧，页分裂大幅减少，索引更紧凑。&lt;/p&gt;
&lt;p&gt;索引小 22% 不是魔法，是&lt;strong&gt;减少了碎片&lt;/strong&gt;。单点查询快 4 倍也不奇怪——B-tree 层级更少、缓存命中率更高。&lt;/p&gt;

&lt;h3 class="relative group"&gt;总结
 &lt;div id="总结" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%80%bb%e7%bb%93" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;UUID v4 和 v7 在碰撞安全性上是一样的——都依赖熵源质量，一个用随机数填充前 48 位，一个用时间戳。碰撞是极少数人在特定环境下踩到的坑，你的环境大概率没事，这个基本判断不用变。&lt;/p&gt;
&lt;p&gt;真正该琢磨的是&lt;strong&gt;索引性能&lt;/strong&gt;。v7 的时序特性让 B-tree 更紧凑，实测写入快 35%、索引小 22%、查询快 2-4 倍。如果系统对 UUID 的写入量很大，换 v7 能省不少存储和 CPU。&lt;/p&gt;
&lt;p&gt;PG 18 会原生支持 &lt;code&gt;gen_uuid_v7()&lt;/code&gt;，目前可以应用层生成。不管用哪个版本，加 UNIQUE 约束总是对的。&lt;/p&gt;</content:encoded></item></channel></rss>