J'essaie d'importer des données d'image dans un server sql 2008 avec un code comme celui-ci:
INSERT INTO [TAB] (ID_PHOTO,PHOTO) VALUES( CAST('333EFB54-7062-E043-F088-FE0A916C0297' as uniqueidentifier), CONVERT(varbinary(max),'0xFFD8FFE000') )
La string est juste un mannequin, mais quand je fais l'insertion j'ai trouvé quelque chose comme ça dans la database
0x307846464438464645303030
ce qui n'est pas exactement ce à quoi je m'attendais. Est-ce que quelqu'un sait ce que j'ai mal fait?
Le problème ici est simplement qu'une string – '0xFFD8FFE000'
– est convertie en VARBINARY
, et donc chaque caractère – d'abord 0
, puis x
, puis F
, et ainsi de suite – est "converti" en sa représentation hexadécimale:
Character -- Hex value 0 30 x 78 F 46 F 46 D 44 8 38 F 46 F 46 E 45 0 30 0 30 0 30
Ainsi, le 0xFFD8FFE000
été vu comme une string de caractères, tout comme "c'est un test", plutôt que comme une séquence d'octets.
Heureusement, le correctif est assez simple: il suffit d'append une valeur "style" de 1
pour le troisième paramètre optionnel à CONVERT
:
SELECT CONVERT(VARBINARY(MAX), '0xFFD8FFE000', 1); -- 0xFFD8FFE000
Ce que vous voyez est correct. Vous devriez être en mesure d'exécuter ce qui suit pour voir que la conversion se passe correctement (en gros, convertissez la valeur varbinary dans votre database en VARCHAR):
SELECT CONVERT(varbinary(max),'0xFFD8FFE000') SELECT CONVERT(varchar(100), 0x307846464438464645303030)
OU
SELECT CONVERT(varchar(100), CONVERT(varbinary(max),'0xFFD8FFE000'))
Notez le manque de guillemets simples autour de la valeur varbinary – pas nécessaire dans SQL Server