[英]Convert a MSSQL String to Hex and unhex the value in MySQL
我想將Microsoft SQL中的字符串轉換為十六進制值,例如:
declare @b varbinary(max)
set @b = (Select cast('Ali' as varbinary))
select cast(@b as varchar(max))
select @b
它返回:
這很棒! 但是知道我想解析MySQL中的確切字符串:
所以在MySQL中,字符串看起來與我從MSSQL獲得的字符串略有不同。 也許我可以做一個字符串替換或其他東西
但是使用更復雜的字符串,它甚至會在mssql和mysql之間變換:
- 和以前一樣的程序,只是嘗試了另一個字符串: -
MSSQL-String: 0x53414D31302F32303130E4F6FCDF5C2A23E92D656E64657C3C6469762073
MySQL-String: 53414D31302F32303130C3A4C3B6C3BCC39F2A23C3A92D656E
開頭是相同的(也許是因為SAM),但它似乎是特殊字符的問題...... :-(
SQL Server和MySQL十六進制編碼在第11位開始發散。該位置的字符是ä
,第一個非ascii字符。 因此,很可能有理由相信每個數據庫使用不同的編碼。
MySQL編碼是UTF-8
UTF-8中ä
的編碼是0xC3A4
,這就是MySQL使用的。 utf-8解碼器證實了這一點:
53414D31302F32303130C3A4C3B6C3BCC39F2A23C3A92D656E
-->
SAM10/2010äöüß*#é-en
它被切斷的原因是你的MySQL客戶端,它表示最終切斷了...
SQL Server編碼是Latin1_General(又名Windows-1252)
ä
的SQL Server編碼是0xE4
。 它可能是在SQL Server的Latin1_General
排序Latin1_General
編碼的,它對應於Windows-1252 。 其他字符öüß
在Windows-1252下轉換為0xF6FCDF
,確認猜測。
要強制SQL Server使用其他編碼,請指定collate
子句:
cast('öüß' AS varchar(5)) collate French_CS_AS
由於您的cast(... as varbinary)
,SQL Server十六進制字符串被截斷。 如果未使用CAST函數指定n,則默認長度為30 。 嘗試明確指定大小,或將其設置為max
:
cast('abcd' as varbinary(max))
^^^^^
此查詢可以解決目的:
Declare @b varbinary(max)
Select @b=Cast(CONVERT(varbinary(4), '0x' + @HexValue, 1) As varbinary)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.