Question

À l'heure actuelle, nous émigrons de Delphi 2007 à Delphi XE2 pour soutenir Unicode. Nous conservons une grande données XML comme blobs dans la base de données. Pour insérer la valeur blob dans le champ de base de données que nous utilisons le code ci-dessous

Param.DataType := ftBlob;
Param.AsBlob := Value;

Mais maintenant le soutien des choses unicode, nous conveted tous les champs blob dans la base de données nvarchar (max). Nous avons changé le code ci-dessus pour

Param.DataType := ftwideString;
Param.AsString := Value;

Est-ce la bonne chose à faire, ou devrait-il être traité différemment de manière à stocker des données Unicode dans la base de données.

Était-ce utile?

La solution

blobs stocker tout ce que vous jetez à eux sans déduisant rien. Bien qu'ils puissent avoir peu de capacités de manipulation, ils ne seront jamais modifier les données. Sur les autres mains, un champ à base de caractères (même un CLOB), aura un jeu de caractères associé. De ce fait les données qui y sont stockées seront converties avant et en arrière du jeu de caractères source et celui de destination. Par exemple, si votre fichier XML est UTF-8 codé et le champ est UTF-16 il sera converti en écrit et lu. Bien sûr, si les deux encodages sont la même conversion de n'est effectuée. Si votre base de données ne dispose pas d'un type XML, je les stocker dans lobs binaires si elles pouvaient être dans différents encodages et aucune opération sur eux (mais l'écriture / lecture) sont nécessaires. Si elles sont toujours dans le même encodage un lob de caractère pourrait être plus facile à travailler. L'utilisation d'un champ de caractère avec un grand fichier XML peut conduire à des erreurs en raison de la taille du champ max.

Autres conseils

Bien que votre solution devrait fonctionner, je vous suggère de garder le format de champ blob, utilisez UTF8 comme encodage par défaut pour la base de données (par exemple firebird):

CREATE DATABASE 'localhost:c:\Data\MyDatabase.FDB' user 'SYSDBA' password 'masterkey'
  DEFAULT CHARACTER SET UTF8;

et convertir votre chaîne XML en UTF8 encodage avant de l'enregistrer comme blob.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top