PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Insertion d'une chaîne de texte avec hexadécimal dans PostgreSQL en tant qu'octet

Vous pouvez convertir une chaîne hexadécimale en bytea en utilisant le decode fonction (où "encodage" signifie encoder une valeur binaire en une valeur textuelle). Par exemple :

select decode('DEADBEEF', 'hex');
      decode      
------------------
 \336\255\276\357

ce qui est plus compréhensible avec la sortie par défaut de 9.0 :

   decode   
------------
 \xdeadbeef

La raison pour laquelle vous ne pouvez pas simplement dire E'\xDE\xAD\xBE\xEF' est que cela est destiné à faire une valeur de texte, pas un bytea, donc Postgresql essaiera de le convertir de l'encodage du client à l'encodage de la base de données. Vous pouvez écrire le format d'échappement bytea comme ça, mais vous devez doubler les antislash :E'\\336\\255\\276\\357'::bytea . Je pense que vous pouvez voir pourquoi le format bytea est modifié... IMHO le decode() La fonction est un moyen raisonnable d'écrire des entrées, même s'il y a une surcharge impliquée.