web-dev-qa-db-fra.com

Quel type de données SQL pour stocker le fichier encodé Base64?

nvarchar (max), varchar (max), ou dois-je vraiment décoder la chaîne et la mettre dans une image ou un blob ou quelque chose?

La version plus longue: (avec tous les détails juteux)

J'ai un .Net SOAP, qui enregistre les enregistrements dans une base de données SQL 2008. Le service va être étendu pour accepter une image, qui (pour le meilleur ou pour le pire) a également besoin pour entrer dans la DB temporairement.

Pour simplifier les choses, le service prend l'image en tant que chaîne codée en Base 64 et devra la restituer ultérieurement en tant que chaîne codée en Base64 (une méthode différente sur le même service).

À l'origine, j'allais simplement utiliser nvarchar (max), et je suis sûr que cela fonctionnerait. Mais j'ai pensé que le codage base64 signifie qu'il pourrait utiliser varchar (max) à la place et utiliser moins d'espace de stockage. Est-ce correct? Ou devrais-je mordre la balle et décoder le texte en binaire, le stocker en tant qu'objet blob, puis le réencoder à la sortie?

Enfin - il est peu probable que le stockage et les performances de la charge causent des problèmes, il s'agit d'un projet pour animaux de compagnie et sera à faible charge.

Edit: En réponse à la question de @ howiecamp, j'ai écrit comment j'encodais l'URL de l'image ici: http://www.flowerchild.org.uk/archive/2010/06/13/base-64-encoding -une-image-à-passer-sur-un-web.html

40
Andrew M

Eh bien, Base64 est un encodage ASCII, vraiment - donc certainement pas besoin de NVARCHAR - et comme c'est du texte, je suggère VARCHAR(MAX)

C'est du texte pur, jusqu'à 2 Go (devrait suffire), et c'est un type de chaîne, vous pouvez donc utiliser toutes les fonctions de chaîne dessus. NVARCHAR utilise en effet deux fois plus de stockage - toujours 2 octets par caractère - et est totalement inutile dans ce cas.

73
marc_s