Comment puis-je trouver la longueur (taille) d'un blob binaire en sqlite
J'ai une table sqlite qui contient un fichier BLOB, mais besoin de faire une taille/contrôle de la longueur sur la goutte, comment dois-je faire?
Selon certains documents, je n'ai trouver, à l'aide de longueur(blob) ne fonctionne pas, parce que la longueur() ne fonctionne que sur les textes et arrêter de compter après la première NULL. Mes tests empiriques ont montré que cela est vrai.
Je suis en utilisant SQLite 3.4.2
Mises à jour:
Afin de SQLite 3.7.6 il semble que la longueur() renvoie la valeur correcte de blobs - j'ai vérifié les différents changement de journaux de sqlite, mais ne voit pas de quelle version il a été corrigé.
De Sqlite 3.7.6:
payload_id|longueur(charge)|longueur(hex(charge utile))/2 1807913/194/194 1807914/171/171
La la documentation a été modifié pour en tenir compte.
la longueur(X) La longueur(X) renvoie la longueur de X en caractères si X est une chaîne de caractères, ou, en octets, si X est un blob. Si X est NUL, la longueur(X) est La valeur NULL. Si X est numérique alors la longueur(X) renvoie la longueur d'une chaîne la représentation de X.
Vous devez vous connecter pour publier un commentaire.
n'ai pas eu ce problème, mais vous pouvez essayer de
length(hex(glob))/2
Mise À Jour (Août-2012):
Pour SQLite 3.7.6 (publié le 12 avril 2011) et, plus tard,
length(blob_column)
fonctionne comme prévu les deux à la fois du texte et des données binaires.pour moi
length(blob)
fonctionne très bien, donne les mêmes résultats comme les autres.\0
caractère.Comme une réponse supplémentaire, un problème commun est que sqlite ne tient pas compte du type de colonne d'une table, donc si vous stocker une chaîne de caractères dans une colonne blob, il devient un chaîne de colonne de la ligne. La longueur de travaux différents sur les cordes, il n'aura alors qu'à renvoyer le nombre de caractères avant la finale de 0 octet. Il est facile de stocker des chaînes de caractères dans les colonnes blob parce que vous devez normalement exprimés explicitement pour insérer un blob:
pour obtenir la bonne longueur pour les valeurs stockées en tant que chaîne de caractères, vous pouvez lancer l'argument de longueur de blob:
La raison pour laquelle la longueur(hex(blob-colonne))/2 fonctionne, c'est que hex ne s'arrête pas à l'interne de 0 octets, et la générées chaîne hexadécimale de ne pas contenir de 0 octets de plus, afin length retourne le bon (plein) de longueur.
Exemple de
select
requête qui fait cela, obtenir la longueur de la goutte dans la colonnemyblob
, dans le tableaumytable
, à la ligne 3:LENGTH() fonction dans sqlite 3.7.13 sur Debian 7 ne fonctionne pas, mais la LONGUEUR(HEX())/2 fonctionne très bien.