sql >> Database >  >> RDS >> Sqlserver

Converteer een BINARY die is opgeslagen als VARCHAR naar BINARY

Het resultaat dat u krijgt is omdat de tekenreeks "0003f80075177fe6" (een VARCHAR waarde) wordt geconverteerd naar codepunten en deze codepunten worden als binaire waarde opgediend. Aangezien u waarschijnlijk een ASCII-compatibele sortering gebruikt, betekent dit dat u de ASCII-codepunten krijgt:0 is 48 (30 hex), f is 102 (66 hex) enzovoort. Dit verklaart de 30 30 30 33 66 38 30 30...

Wat u in plaats daarvan wilt doen, is de string ontleden als een hexadecimale weergave van de bytes (00 03 f8 00 75 71 77 fe 66 ). CONVERT accepteert een extra "stijl"-parameter waarmee u hexstrings kunt converteren:

SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)

Stijl 2 converteert een hexstring naar binair. (Stijl 1 doet hetzelfde voor strings die beginnen met "0x", wat hier niet het geval is.)

Merk op dat als er minder dan 16 bytes zijn (zoals in dit geval), de waarde rechts wordt gevuld met nullen (0x0003F80075177FE60000000000000000 ). Als je het in plaats daarvan links-opgevuld nodig hebt, moet je dat zelf doen:

SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)

Merk tot slot op dat binaire letterlijke waarden zonder conversie gespecificeerd kunnen worden door ze simpelweg te laten voorafgaan door "0x" en geen aanhalingstekens te gebruiken:SELECT 0x0003f80075177fe6 retourneert een kolom van het type BINARY(8) . Niet relevant voor deze vraag, maar voor de volledigheid.




  1. Hoe converteer ik mijn programma van python en mysql naar een exe-bestand?

  2. Hoe gegevens uit meerdere tabellen ophalen met behulp van een PHP-formulier?

  3. Hoe kunnen we in PostgreSQL zien of elke index van een tabel is geclusterd of niet?

  4. ORA-65096-fout oplossen bij het maken van geautomatiseerde tests in Django met behulp van Oracle