Ste*_*dle 7 mysql sql sql-server
我想将Microsoft SQL中的字符串转换为十六进制值,例如:
declare @b varbinary(max)
set @b = (Select cast('Ali' as varbinary))
select cast(@b as varchar(max))
select @b
Run Code Online (Sandbox Code Playgroud)
它返回:

这很棒!但是知道我想解析MySQL中的确切字符串:

所以在MySQL中,字符串看起来与我从MSSQL获得的字符串略有不同.也许我可以做一个字符串替换或其他东西
但是使用更复杂的字符串,它甚至会在mssql和mysql之间变换:
- 和以前一样的程序,只是尝试了另一个字符串: -


MSSQL-String: 0x53414D31302F32303130E4F6FCDF5C2A23E92D656E64657C3C6469762073
MySQL-String: 53414D31302F32303130C3A4C3B6C3BCC39F2A23C3A92D656E
Run Code Online (Sandbox Code Playgroud)
开头是相同的(也许是因为SAM),但它似乎是特殊字符的问题...... :-(
SQL Server和MySQL十六进制编码在第11位开始发散.该位置的字符是ä第一个非ascii字符.因此,很可能有理由相信每个数据库使用不同的编码.
MySQL编码是UTF-8
äUTF-8 的编码是0xC3A4,所以这就是MySQL使用的.utf-8解码器证实了这一点:
53414D31302F32303130C3A4C3B6C3BCC39F2A23C3A92D656E
-->
SAM10/2010äöüß*#é-en
Run Code Online (Sandbox Code Playgroud)
它被切断的原因是你的MySQL客户端,它表示最后的切断....
SQL Server编码是Latin1_General(又名Windows-1252)
SQL Server编码ä是0xE4.它可能是在SQL Server的Latin1_General排序规则中编码的,它对应于Windows-1252.其他字符öüß转换为0xF6FCDFWindows-1252,确认猜测.
要强制SQL Server使用其他编码,请指定以下collate子句:
cast('öüß' AS varchar(5)) collate French_CS_AS
Run Code Online (Sandbox Code Playgroud)
由于您的SQL Server十六进制字符串被切断cast(... as varbinary).如果未使用CAST函数指定n,则默认长度为30.尝试明确指定大小,或将其设置为max:
cast('abcd' as varbinary(max))
^^^^^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25797 次 |
| 最近记录: |