Les trois produisent des identifiants de 128 bits que l'on génère sans interroger un serveur central. Ils diffèrent par l'usage des bits. Générez et inspectez-les avec le générateur d'UUID et le décodeur d'UUID ; le contexte est expliqué dans Comment fonctionnent les UUID.
Valeurs d'exemple
- UUID v4 d'exemple :
f47ac10b-58cc-4372-a567-0e02b2c3d479 - UUID v7 d'exemple :
01a17fce-7800-7abc-8123-456789abcdef(ses 48 premiers bits sont l'heure Unix en millisecondes : 2026-10-28 00:00:00 UTC) - ULID d'exemple :
01M5ZWWY0004HMASW9NF6YY093(les 10 premiers caractères codent la même heure)
En un coup d'œil
| UUID v4 | UUID v7 | ULID | |
|---|---|---|---|
| Bits | 122 aléatoires + 6 fixes | 48 de temps + 74 quasi aléatoires + 6 fixes | 48 de temps + 80 aléatoires |
| Forme texte | 36 caractères, hexadécimal avec tirets | 36 caractères, hexadécimal avec tirets | 26 caractères, Base32 de Crockford |
| Trié par date de création | Non | Oui | Oui (aussi en texte) |
| Révèle la date de création | Non | Oui, à la milliseconde | Oui, à la milliseconde |
| Norme | RFC 9562 | RFC 9562 | Spécification communautaire |
| Localité dans un index de base de données | Mauvaise (insertions aléatoires) | Bonne | Bonne |
Ce que cela change en pratique
- Les clés v4 aléatoires dispersent les insertions dans un index B-tree, ce qui provoque des éclatements de pages et des défauts de cache sur les grandes tables. Les v7 et ULID, ordonnées dans le temps, s'ajoutent près de la fin.
- Les identifiants ordonnés dans le temps révèlent la date de création d'un enregistrement. Ne les utilisez pas là où c'est sensible, comme pour des jetons de réinitialisation de mot de passe (utilisez v4 ou un jeton aléatoire sûr).
- Dans une même milliseconde, v7 et ULID demandent des précautions pour rester monotones ; les bibliothèques ajoutent un compteur ou incrémentent la partie aléatoire.
- Les deux formats sont insensibles à la casse en texte, mais l'ULID évite les lettres I, L, O et U pour être plus facile à lire à voix haute.
Lequel choisir
- Nouvelles clés primaires de bases de données : UUID v7.
- Identifiants qui ne doivent rien révéler : UUID v4.
- Identifiants courts, triables et adaptés aux URL où la forme à 26 caractères convient : ULID.