sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertera en BINÄR lagrad som VARCHAR till BINÄR

Resultatet du får beror på att strängen "0003f80075177fe6" (en VARCHAR värde) konverteras till kodpunkter, och dessa kodpunkter serveras som ett binärt värde. Eftersom du förmodligen använder en ASCII-kompatibel sortering betyder det att du får ASCII-kodpunkterna:0 är 48 (30 hex), f är 102 (66 hex) och så vidare. Detta förklarar 30 30 30 33 66 38 30 30...

Vad du istället vill göra är att analysera strängen som en hexadecimal representation av byte (00 03 f8 00 75 71 77 fe 66 ). CONVERT accepterar en extra "stil"-parameter som låter dig konvertera hexsträngar:

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

Stil 2 konverterar en hexsträng till binär. (Stil 1 gör samma sak för strängar som börjar med "0x", vilket inte är fallet här.)

Observera att om det finns mindre än 16 byte (som i det här fallet), är värdet högerutfyllt med nollor (0x0003F80075177FE60000000000000000 ). Om du istället behöver den vänsterstoppad måste du göra det själv:

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

Slutligen, notera att binära bokstaver kan specificeras utan konvertering helt enkelt genom att prefixet dem med "0x" och inte använda citattecken:SELECT 0x0003f80075177fe6 returnerar en kolumn av typen BINARY(8) . Inte relevant för denna fråga, utan bara för fullständighetens skull.




  1. Laravel kan inte använda mysql_real_escape_string()

  2. Hur använder man bootstrap css-tabeller för att visa data från MySQL-tabeller?

  3. Vad är subqueries i oracle

  4. Springboot + MySQL:kan inte läsa någon datumtyp från (DATE, DATETIME, TIMESTAMP) MySQL