gpt4 book ai didi

mysql - 将 MSSQL 字符串转换为十六进制并取消 MySQL 中的值

转载 作者:可可西里 更新时间:2023-11-01 06:36:58 26 4
gpt4 key购买 nike

我想将 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 之间有所不同:

-- 和以前一样的过程,只是尝试了另一个字符串:--

enter image description here

enter image description here

MSSQL-String: 0x53414D31302F32303130E4F6FCDF5C2A23E92D656E64657C3C6469762073
MySQL-String: 53414D31302F32303130C3A4C3B6C3BCC39F2A23C3A92D656E

开头是一样的(可能是因为SAM),不过好像是特殊字符的问题... :-(

最佳答案

SQL Server 和 MySQL 的十六进制编码在位置 11 开始不同。该位置的字符是 ä,第一个非 ascii 字符。因此可能有理由相信每个数据库都使用不同的编码。

MySQL编码为UTF-8

UTF-8中ä的编码是0xC3A4,所以MySQL就是这么用的。 utf-8 decoder 证实了这一点:

53414D31302F32303130C3A4C3B6C3BCC39F2A23C3A92D656E
-->
SAM10/2010äöüß*#é-en

断掉的原因是你的MySQL客户端,最后用...表示断掉。

SQL Server 编码为 Latin1_General(又名 Windows-1252)

ä 的 SQL Server 编码是 0xE4。它可能在 SQL Server 的 Latin1_General 归类中编码,对应于 Windows-1252 .其他字符öüß在Windows-1252下转换为0xF6FCDF,证实了猜测。

要强制 SQL Server 使用不同的编码,请指定 collat​​e 子句:

cast('öüß' AS varchar(5)) collate French_CS_AS

由于您的cast(... as varbinary),SQL Server 十六进制字符串被截断。当未使用 CAST 函数指定 n 时,default length is 30 .尝试明确指定大小,或将其设置为 max:

cast('abcd' as varbinary(max))
^^^^^

关于mysql - 将 MSSQL 字符串转换为十六进制并取消 MySQL 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18446861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com