uuid debugging database web-development javascript

Résoudre 'invalid UUID format' et les erreurs UUID courantes

Un guide complet pour corriger les erreurs UUID telles que 'invalid UUID format', 'not a valid UUID' et les incompatibilités de version. Apprenez à valider et formater les UUID correctement.

Résoudre "invalid UUID format" et les erreurs UUID courantes : Un guide complet

Les UUID (Universally Unique Identifiers) sont des nombres de 128 bits utilisés pour identifier de manière unique des informations dans les systèmes informatiques. Ils sont essentiels pour les clés primaires de base de données, les ID de session et les identifiants de ressources dans les systèmes distribués. Bien qu'ils ressemblent à de simples chaînes de caractères, ils suivent une structure stricte. Lorsque cette structure est violée, vous verrez des erreurs comme invalid input syntax for type uuid, not a valid UUID ou UUID version mismatch.

Dans ce guide, nous allons décomposer la structure d'un UUID et vous montrer comment corriger les erreurs de formatage courantes.


1. Messages d'erreur UUID courants

Selon votre base de données ou votre langage de programmation, vous pourriez rencontrer ceux-ci :

  • PostgreSQL: ERROR: invalid input syntax for type uuid: "..."
  • Python (module uuid): ValueError: badly formed hexadecimal UUID string
  • Java (UUID.fromString): java.lang.IllegalArgumentException: Invalid UUID string: ...
  • JavaScript (Bibliothèques comme uuid): TypeError: Invalid UUID

2. Principales causes et solutions

2.1 Caractère ou longueur invalide

Un UUID standard (comme la version 4) doit mesurer exactement 36 caractères de long, y compris quatre traits d'union. Il ne doit contenir que des caractères hexadécimaux (0-9, a-f).

L'erreur :

  • 123e4567-e89b-12d3-a456-42661417400 (Trop court)
  • 123e4567-e89b-12d3-a456-42661417400g (Contient 'g', qui n'est pas hexadécimal)
  • 123e4567e89b12d3a456426614174000 (Traits d'union manquants)

La solution : Assurez-vous que la chaîne suit le format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Si vous avez une chaîne de 32 caractères sans traits d'union, certains systèmes l'autorisent, mais pour une compatibilité maximale, vous devriez les rajouter.

2.2 Incompatibilité de version UUID (UUID version mismatch)

Il existe plusieurs versions d'UUID (v1, v3, v4, v5, v7). Chaque version a des bits spécifiques définis aux 13ème et 17ème positions.

  • Version 4 (Aléatoire) : Le 13ème caractère doit être 4, et le 17ème caractère doit être l'un des suivants : 8, 9, a, b.
    • Exemple : ...-4xxx-y...y est 8, 9, a ou b.

Le symptôme : Votre application attend un UUID de version 4 mais reçoit une version 1 (basée sur le temps), ce qui fait échouer la logique de validation même si la chaîne "ressemble" à un UUID, entraînant l'erreur UUID version mismatch.

2.3 Problèmes de sensibilité à la casse

Bien que la spécification UUID indique qu'ils doivent être représentés en minuscules, certains systèmes hérités ou validateurs stricts peuvent échouer s'ils reçoivent des caractères en majuscules.

La solution : Convertissez toujours les UUID en minuscules avant de les stocker ou de les valider.

const cleanUuid = rawUuid.toLowerCase().trim();

3. Dépannage avancé

3.1 PostgreSQL "invalid input syntax"

Cela se produit souvent lorsque vous essayez d'insérer une chaîne vide "" ou une chaîne de type null dans une colonne de type UUID. Solution : Assurez-vous que votre application envoie null (le NULL SQL) au lieu d'une chaîne vide si l'ID est manquant.

3.2 Suppression des accolades

Certains systèmes basés sur Windows ou d'anciennes API Microsoft représentent les UUID (GUID) avec des accolades : {123e4567-e89b-12d3-a456-426614174000}. Solution : Supprimez les accolades avant de passer la chaîne à une bibliothèque UUID standard ou à une base de données moderne.


4. Prévention et bonnes pratiques

  1. Utiliser un validateur : Validez toujours un UUID avant d'effectuer des opérations en base de données.
const { validate: validateUuid } = require('uuid');
if (!validateUuid(userInput)) {
  throw new Error("Invalid UUID format");
}
  1. Standardiser sur la version 4 : À moins d'avoir une raison spécifique d'utiliser une autre version (comme le tri par temps avec la v7), utilisez la version 4 pour les identifiants polyvalents.
  2. Stocker en binaire (si possible) : Dans les bases de données haute performance, le stockage des UUID en tant que BINARY(16) au lieu de CHAR(36) peut économiser considérablement d'espace disque et réduire la taille des index.

5. FAQ : Foire aux questions

Q : Quelle est la différence entre un UUID et un GUID ?

R : Pour presque tous les usages pratiques, c'est la même chose. GUID (Globally Unique Identifier) est le terme de Microsoft pour la norme UUID.

Q : Un UUID peut-il ne pas être unique ?

R : Pour la version 4 (aléatoire), la probabilité d'une collision est si incroyablement faible qu'elle est considérée comme nulle pour tous les usages humains. Il faudrait générer des milliards d'UUID par seconde pendant des siècles pour avoir 50 % de chances d'avoir une seule collision.

Q : Est-il sûr d'utiliser des UUID dans les URL ?

R : Oui. Les UUID ne contiennent que des caractères alphanumériques et des traits d'union, qui sont sûrs pour les URL. C'est un excellent moyen de masquer le nombre réel de ressources dans votre base de données (contrairement aux entiers auto-incrémentés).


6. Outil de vérification rapide

Vous avez du mal avec un ID mal formé ? Utilisez notre Générateur et Validateur d'UUID. Il peut :

  • Valider n'importe quel UUID et identifier sa version.
  • Générer des UUID en masse (v1, v4, v7).
  • Convertir entre les formats (Hex, Base64, Binaire).
  • Formater et normaliser les chaînes UUID malpropres.

Erreurs associées

  • Résoudre les erreurs 'Unexpected token in JSON'
  • Comment corriger les erreurs 'invalid base64 string'
  • Résoudre les erreurs 'invalid regular expression'