<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="https://sandfox.me/assets/xml/atom.xsl" type="text/xsl media="all"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom">
  <title>Sand Fox (Posts about uuid)</title>
  <id>https://sandfox.me/tags/uuid.xml</id>
  <updated>2026-01-05T10:06:07Z</updated>
  <author>
    <name>Anton Smirnov</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://sandfox.me/tags/uuid.xml"/>
  <link rel="alternate" type="text/html" href="https://sandfox.me/tags/uuid.html"/>
  <generator uri="https://getnikola.com/">Nikola</generator>
  <entry>
    <title>Generating UUIDv7 in PostgreSQL 18</title>
    <id>https://sandfox.me/misc/pgsql-18-uuid-v7.html</id>
    <updated>2025-10-02T00:37:00+03:00</updated>
    <published>2025-10-02T00:37:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/pgsql-18-uuid-v7.html"/>
    <summary type="html">&lt;p&gt;&lt;a class="reference external" href="https://sandfox.me/misc/pgsql-uuid-v7.html"&gt;Another post&lt;/a&gt; just turned from a useful algorithm to madskillz.
Since PostgreSQL 18 the method is just:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_4e508138ff324ce581973ead89a56e9f-1" name="rest_code_4e508138ff324ce581973ead89a56e9f-1" href="https://sandfox.me/misc/pgsql-18-uuid-v7.html#rest_code_4e508138ff324ce581973ead89a56e9f-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuidv7&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</summary>
    <category term="postgres" label="postgres"/>
    <category term="sql" label="sql"/>
    <category term="uuid" label="uuid"/>
    <category term="uuidv7" label="uuidv7"/>
  </entry>
  <entry>
    <title>Generating UUIDv7 in PostgreSQL</title>
    <id>https://sandfox.me/misc/pgsql-uuid-v7.html</id>
    <updated>2025-10-02T00:43:00+03:00</updated>
    <published>2024-01-20T07:50:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/pgsql-uuid-v7.html"/>
    <summary type="html">&lt;aside class="admonition note"&gt;
&lt;p class="admonition-title"&gt;Note&lt;/p&gt;
&lt;p&gt;Update: &lt;a class="reference external" href="https://sandfox.me/misc/pgsql-18-uuid-v7.html"&gt;PostgreSQL 18 added uuidv7() function.&lt;/a&gt;&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;But what about Postgres?
We can do it too.
Hopefully generators for new UUID versions will be added to uuid-ossp but it is not yet the case.&lt;/p&gt;
&lt;p&gt;The easiest way for now is to use pgcrypto, so let's start with that:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_fbf1735ea24d47f89731257bc8f03efd-1" name="rest_code_fbf1735ea24d47f89731257bc8f03efd-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_fbf1735ea24d47f89731257bc8f03efd-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;extension&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pgcrypto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now port the solution from &lt;a class="reference external" href="https://sandfox.me/misc/mysql-uuid-v7.html"&gt;the MySQL post&lt;/a&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-1" name="rest_code_cd2c620983a04bd0a166042eb8951c71-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-2" name="rest_code_cd2c620983a04bd0a166042eb8951c71-2" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epoch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'12'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-3" name="rest_code_cd2c620983a04bd0a166042eb8951c71-3" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- version&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-4" name="rest_code_cd2c620983a04bd0a166042eb8951c71-4" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-5" name="rest_code_cd2c620983a04bd0a166042eb8951c71-5" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- variant bits&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-6" name="rest_code_cd2c620983a04bd0a166042eb8951c71-6" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_cd2c620983a04bd0a166042eb8951c71-7" name="rest_code_cd2c620983a04bd0a166042eb8951c71-7" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_cd2c620983a04bd0a166042eb8951c71-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Like with MariaDB, Postgres doesn't care about dashes on insertion,
so this value can be directly applied to a field with the uuid type.&lt;/p&gt;
&lt;p&gt;And again, to make it a formatted value, use a type cast:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-1" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-2" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-2" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epoch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'12'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-3" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-3" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-4" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-4" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-5" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-5" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-6" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-6" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))::&lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;
&lt;a id="rest_code_4cfc6fa3655a48ab870a418b635978d0-7" name="rest_code_4cfc6fa3655a48ab870a418b635978d0-7" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_4cfc6fa3655a48ab870a418b635978d0-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And to have a bytea value, use decode:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-1" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-1" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-2" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-2" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-3" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-3" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;epoch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'12'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-4" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-4" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-5" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-5" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-6" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-6" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;to_hex&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-7" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-7" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen_random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-8" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-8" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'hex'&lt;/span&gt;
&lt;a id="rest_code_2e74ad5bb73d412e871a7dd02df2d831-9" name="rest_code_2e74ad5bb73d412e871a7dd02df2d831-9" href="https://sandfox.me/misc/pgsql-uuid-v7.html#rest_code_2e74ad5bb73d412e871a7dd02df2d831-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</summary>
    <category term="postgres" label="postgres"/>
    <category term="sql" label="sql"/>
    <category term="uuid" label="uuid"/>
    <category term="uuidv7" label="uuidv7"/>
  </entry>
  <entry>
    <title>Generating UUIDv7 in MySQL and MariaDB</title>
    <id>https://sandfox.me/misc/mysql-uuid-v7.html</id>
    <updated>2024-01-20T07:06:00+02:00</updated>
    <published>2024-01-20T07:06:00+02:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/misc/mysql-uuid-v7.html"/>
    <summary type="html">&lt;p&gt;A quick way to generate UUIDv7 in MySQL 8 and MariaDB 11:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-1" name="rest_code_c37da9df485b40148f85e6698fa6f074-1" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-2" name="rest_code_c37da9df485b40148f85e6698fa6f074-2" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-3" name="rest_code_c37da9df485b40148f85e6698fa6f074-3" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;-- Use NOW(3) to get milliseconds&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-4" name="rest_code_c37da9df485b40148f85e6698fa6f074-4" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-5" name="rest_code_c37da9df485b40148f85e6698fa6f074-5" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- version&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-6" name="rest_code_c37da9df485b40148f85e6698fa6f074-6" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-7" name="rest_code_c37da9df485b40148f85e6698fa6f074-7" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- variant bits&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-8" name="rest_code_c37da9df485b40148f85e6698fa6f074-8" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_c37da9df485b40148f85e6698fa6f074-9" name="rest_code_c37da9df485b40148f85e6698fa6f074-9" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c37da9df485b40148f85e6698fa6f074-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will generate a hex string that can be inserted into MariaDB's UUID type as is, dashes will be added automatically.&lt;/p&gt;
&lt;p&gt;If you need it as a binary value, wrap with unhex:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-1" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-1" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-2" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-2" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;unhex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-3" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-3" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-4" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-4" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-5" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-5" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-6" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-6" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-7" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-7" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-8" name="rest_code_c7c2b50450134b08b43ecbcb8cd86a59-8" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_c7c2b50450134b08b43ecbcb8cd86a59-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you specifically need a valid RFC 4122 string representation, use a bin formatter function (MySQL) or a type cast (MariaDB):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code sql"&gt;&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-1" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-1" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;-- MySQL&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-2" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-2" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-2"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-3" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-3" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;bin_to_uuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unhex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-4" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-4" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-5" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-5" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-6" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-6" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-7" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-7" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-8" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-8" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-9" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-9" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-9"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-10" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-10" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-11" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-11" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-11"&gt;&lt;/a&gt;&lt;span class="c1"&gt;-- MariaDB&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-12" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-12" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-12"&gt;&lt;/a&gt;&lt;span class="k"&gt;select&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-13" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-13" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-13"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;cast&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-14" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-14" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-14"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;lpad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unix_timestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-15" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-15" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-15"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="s1"&gt;'7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-16" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-16" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-16"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-17" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-17" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-17"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-18" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-18" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-18"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_964e18fde5dd4caa83087b6869edbb7e-19" name="rest_code_964e18fde5dd4caa83087b6869edbb7e-19" href="https://sandfox.me/misc/mysql-uuid-v7.html#rest_code_964e18fde5dd4caa83087b6869edbb7e-19"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;UPD: &lt;a class="reference external" href="https://sandfox.me/misc/pgsql-uuid-v7.html"&gt;Postgres can do it too!&lt;/a&gt;&lt;/p&gt;</summary>
    <category term="mariadb" label="mariadb"/>
    <category term="mysql" label="mysql"/>
    <category term="sql" label="sql"/>
    <category term="uuid" label="uuid"/>
    <category term="uuidv7" label="uuidv7"/>
  </entry>
  <entry>
    <title>UUID Library (and ULID to UUID migration)</title>
    <id>https://sandfox.me/php/uuid.html</id>
    <updated>2023-07-14T05:48:00+03:00</updated>
    <published>2023-07-14T05:48:00+03:00</published>
    <author>
      <name>Anton Smirnov</name>
    </author>
    <link rel="alternate" type="text/html" href="https://sandfox.me/php/uuid.html"/>
    <summary type="html">&lt;p&gt;I created &lt;a class="reference external" href="https://sandfox.dev/php/uuid.html"&gt;a UUID and ULID library&lt;/a&gt; with &lt;a class="reference external" href="https://sandfox.dev/php/uuid/doctrine.html"&gt;Doctrine support&lt;/a&gt;.
Well, who didn't :D&lt;/p&gt;
&lt;p&gt;The main scenario for myself was a possible migration for a project from ULIDs to UUIDs
since UUIDs got a little bit of support in MySQL 8.&lt;/p&gt;
&lt;aside class="admonition warning"&gt;
&lt;p class="admonition-title"&gt;Warning&lt;/p&gt;
&lt;p&gt;The conversion is lossy (of a few bits), if you want to do the same, first run a simulation
that you won't get collisions. (You shouldn't if the generation was random enough but who knows)&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;Example code:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code php"&gt;&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-1" name="rest_code_dabea84a0180415393c677e49f3faa6a-1" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-1"&gt;&lt;/a&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-2" name="rest_code_dabea84a0180415393c677e49f3faa6a-2" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-3" name="rest_code_dabea84a0180415393c677e49f3faa6a-3" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-3"&gt;&lt;/a&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;Arokettu\Uuid\UuidParser&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-4" name="rest_code_dabea84a0180415393c677e49f3faa6a-4" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-5" name="rest_code_dabea84a0180415393c677e49f3faa6a-5" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-5"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// Just a random ULID&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-6" name="rest_code_dabea84a0180415393c677e49f3faa6a-6" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-6"&gt;&lt;/a&gt;&lt;span class="nv"&gt;$ulid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;UuidParser&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;fromBase32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'01H44RDYXJPFCF895N3BBXCZRC'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-7" name="rest_code_dabea84a0180415393c677e49f3faa6a-7" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-7"&gt;&lt;/a&gt;&lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ulid&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;isUuidV7Compatible&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-8" name="rest_code_dabea84a0180415393c677e49f3faa6a-8" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-8"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// UnexpectedValueException: This ULID cannot be converted to UUID v7 losslessly&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-9" name="rest_code_dabea84a0180415393c677e49f3faa6a-9" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-9"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// $uuid = $ulid-&amp;gt;toUuidV7();&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-10" name="rest_code_dabea84a0180415393c677e49f3faa6a-10" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-10"&gt;&lt;/a&gt;&lt;span class="nv"&gt;$uuid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$ulid&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;toUuidV7&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lossy&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-11" name="rest_code_dabea84a0180415393c677e49f3faa6a-11" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-11"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// note digit 13 becoming '7' and digit 17 moving into [89ab] range&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-12" name="rest_code_dabea84a0180415393c677e49f3faa6a-12" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-12"&gt;&lt;/a&gt;&lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$uuid&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;    &lt;span class="c1"&gt;// 01890986-fbb2-73d8-b424-b51ad7d67f0c&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-13" name="rest_code_dabea84a0180415393c677e49f3faa6a-13" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-13"&gt;&lt;/a&gt;&lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ulid&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;toRfc4122&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;   &lt;span class="c1"&gt;// 01890986-fbb2-b3d8-f424-b51ad7d67f0c&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-14" name="rest_code_dabea84a0180415393c677e49f3faa6a-14" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-14"&gt;&lt;/a&gt;&lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$uuid&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;toBase32&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;    &lt;span class="c1"&gt;// 01H44RDYXJEFCB895N3BBXCZRC&lt;/span&gt;
&lt;a id="rest_code_dabea84a0180415393c677e49f3faa6a-15" name="rest_code_dabea84a0180415393c677e49f3faa6a-15" href="https://sandfox.me/php/uuid.html#rest_code_dabea84a0180415393c677e49f3faa6a-15"&gt;&lt;/a&gt;&lt;span class="nb"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ulid&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;    &lt;span class="c1"&gt;// 01H44RDYXJPFCF895N3BBXCZRC&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</summary>
    <category term="ulid" label="ulid"/>
    <category term="uuid" label="uuid"/>
  </entry>
</feed>
