Kết quả bạn nhận được là do chuỗi "0003f80075177fe6" (VARCHAR
giá trị) được chuyển đổi thành điểm mã và các điểm mã này được phục vụ như một giá trị nhị phân. Vì có thể bạn đang sử dụng đối chiếu tương thích ASCII, điều đó có nghĩa là bạn nhận được các điểm mã ASCII:0
là 48 (30 hex), f
là 102 (66 hex), v.v. Điều này giải thích 30 30 30 33 66 38 30 30...
Thay vào đó, những gì bạn muốn làm là phân tích cú pháp chuỗi dưới dạng đại diện thập lục phân của các byte (00 03 f8 00 75 71 77 fe 66
). CONVERT
chấp nhận một tham số "style" bổ sung cho phép bạn chuyển đổi chuỗi lục giác:
SELECT CONVERT(BINARY(16), '0003f80075177fe6', 2)
Kiểu 2 chuyển đổi một chuỗi lục phân thành hệ nhị phân. (Kiểu 1 thực hiện tương tự đối với các chuỗi bắt đầu bằng "0x", điều này không đúng ở đây.)
Lưu ý rằng nếu có ít hơn 16 byte (như trong trường hợp này), giá trị được đệm bên phải bằng các số 0 (0x0003F80075177FE60000000000000000
). Thay vào đó, nếu bạn cần nó được đệm bên trái, bạn phải tự làm điều đó:
SELECT CONVERT(BINARY(16), RIGHT(REPLICATE('00', 16) + '0003f80075177fe6', 32), 2)
Cuối cùng, lưu ý rằng có thể chỉ định các ký tự nhị phân mà không cần chuyển đổi bằng cách đặt tiền tố chúng bằng "0x" và không sử dụng dấu ngoặc kép:SELECT 0x0003f80075177fe6
sẽ trả về một cột thuộc loại BINARY(8)
. Không có liên quan cho truy vấn này, nhưng chỉ cho sự đầy đủ.