Utiliser des UUID dans SQLite

Est-il possible d’utiliser les valeurs UUID comme clé primaire dans SQLite? Je trouve des informations extrêmement limitées sur le sujet, je ne suis donc pas sûr que SQLite prenne même en charge un type de données UUID. Devrais-je stocker un UUID sous forme de chaîne?

SQLite permet d’utiliser n’importe quel type de données en tant que clé primaire.

Les UUID peuvent être stockés sous forme de chaînes (lisibles par l’homme) ou sous forme de BLOB de 16 octets (ce qui peut être plus rapide si les enregistrements sont si petits que la différence est importante).

La réponse de CL est correcte mais le genre de jupes le problème. Comme mentionné, une colonne (ou plusieurs colonnes) de n’importe quel type peut être utilisée comme clé primaire. Vous pouvez donc stocker l’UUID dans le format de chaîne formaté et lisible par l’homme et en faire la clé de votre table. Et comme un UUID est juste un entier de 128 bits, vous pouvez également stocker les octets de l’entier en tant que BLOB, ce que j’imagine être légèrement plus rapide.

Mais pour répondre plus directement à ce que je pense être la question à résoudre, non, SQLite ne possède aucune fonctionnalité prenant directement en charge les UUID. SQLite utilise le type déclaré d’une colonne pour déterminer laquelle des cinq classes de stockage sous-jacentes (entier, réel, texte, object blob ou null) sera utilisée. Mais le type déclaré d’une colonne est par ailleurs ignoré. Il n’y a donc pas de type de colonne ou de classe de stockage spécifique à l’UUID. Il ne semble pas non plus y avoir de fonctions disponibles pour la conversion vers et à partir d’une chaîne UUID formatée. Pour obtenir les octets de votre UUID, vous devez voir quelles méthodes sont fournies par la langue dans laquelle votre application est écrite. Par exemple, la classe UUID de Java ou le NSUUID d’Apple.

Vous n’êtes pas sûr de l’utiliser comme champ par défaut, mais si quelqu’un doit générer une valeur unique dans une requête sqlite, l’approche suivante peut être utilisée:

La fonction randomblob (N) renvoie un blob à N octets contenant des octets pseudo-aléatoires. Si N est inférieur à 1, un blob aléatoire de 1 octet est renvoyé. Astuce: les applications peuvent générer des identifiants globalement uniques en utilisant cette fonction avec hex () et / ou lower () comme ceci:

 hex(randomblob(16)) 

ou

 lower(hex(randomblob(16)))