PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Migration » [Résolu] Utilisation de ASCII - CHR et le caractère NULL » 26/11/2012 08:30:16

Ah oui super ça marche, c'est exactement ce que je voulais faire !
Merci beaucoup smile

#3 Re : Migration » [Résolu] Utilisation de ASCII - CHR et le caractère NULL » 19/11/2012 20:54:51

Oui effectivement le bytea me parait bien, par contre j'ai pas du comprendre comment ajouter le caractère null (0x00) dans le bytea.
Quand je fais une concaténation du type :
texteBinaire bytea;
texteBinaire := 'a' || '0x00' || 'b';   

Je me retrouve avec un texte de taille 6 au lieu de 3.
Si je fais autrement :     
texteBinaire bytea;
texteBinaire := 'a' || NULL || 'b';

La chaîne est vide.

EDIT :
Je pense avoir trouvé et je suppose qu'il doit y'avoir plus simple mais comme je débute en postgresql ^^, voilà ma piste:
texteBinaire bytea;
texteBinaire := 'a' || decode('\\000','escape') || 'b';

avec decode('\\000','escape') qui renvoie un bytea du caractère null

J'espère que c'est bien ça ^^

EDIT 2 :
Arf non c'est pas ça hmm

#4 Re : Migration » [Résolu] Utilisation de ASCII - CHR et le caractère NULL » 18/11/2012 12:58:13

En fait si ^^
Je vais prendre un cas simple.
Je veux crypter le mot "message" avec le mot clé "passage"

Sous Mysql :
J'appelle ma procédure stockée qui va faire le boulot de cryptage et de stockage de la chaine cryptée dans un champ de type BLOB.
Le principe du cryptage est simple dans ce cas là : la lettre "m" du mot "message" va être codé avec la lettre "p" de ma clé "passage",
la lettre "e" de message va être cryptée avec la lettre "a" de la clé "passagge" et ainsi de suite.

Le codage consiste pour chaque lettre de convertir la lettre en code ASCII puis en binaire sur 8 bits et d'appliquer sur les 2 binaires obtenue le XOR.
Dans le cas ci-dessus lorsque je vais arriver au codage de la lettre "a" de mon mot avec la lettre "a" de ma clé, je me retrouve avec code ASCII = 61, puis binaire de 61 = 01100001
Quand j'applique le XOR sur les 2 binaires qui sont du coup identiques j'obtiens : 00000000
Ce binaire je le reconverti en code ASCII, j'obtiens 0, et je convertit 0 en lettre avec CHAR(0) j'obtiens : '\0' qui est le caractère NULL

Sous PostgreSQL : si je veux faire la même chose avec le cas ci-dessus je suis coincé car CHR(0) =>  null character not permitted.

Je ne trouve donc pas de solution, peut être la piste de tout stocker dans un bytea en faisant en sorte que si mon binaire sur 8 bits est null je n'applique pas un CHR(0) mais je stocke directement la valeur 0x00 dans le bytea...

#5 Migration » [Résolu] Utilisation de ASCII - CHR et le caractère NULL » 17/11/2012 13:49:40

CommanderTX
Réponses : 10

Bonjour à tous,

Voilà je suis en train d'essayer de convertir une procédure stockée créée sous MySQL vers Postgresql or je suis confronté à un problème bien particulier :
la conversion du caractère null en ASCII et inversement.

Ma procédure repose sur le principe du cryptage XOR qui consiste à crypter avec un mot clé une chaîne de caractères.
Dans ma procédure la première étape consiste à convertir chaque lettre du mot clé est en code ASCII puis pour chaque code ASCII obtenu conversion en binaire sur 8 bits et je fais de même pour le texte que je souhaite crypter.
Ex avec le mot : MESSAGE (conversion ascii) => 77   69   83   83   65   71   69  (conversion binaire) => 01001101  01000101   01010011   01010011   01000001   01000111  01000101

Maintenant il peut arriver dans certains cas que lorsque j'applique le XOR je me retrouve avec 8 bits à 0, lorsque je convertit en code ASCII j'obtiens donc 0 et pour obtenir le caractère correspondant à 0 j'applique sous MySQL CHAR(0) qui donne '\0' le caractère NULL mais sous PostgreSQL j'obtiens : CHR(0) =>  null character not permitted.

Pour moi la conversion de MySQL vers PostgreSQL me paraît impossible vu que le caractère Null n'existe pas mais je vous pose quand même la question :
Est ce qu'il y'a moyen de contourner le problème du caractère NULL sous PostGresql ?

En vous remerciant par avance,
cordialement,
Franck

Pied de page des forums

Propulsé par FluxBB