Adr*_*ian 0 t-sql sql-server string encoding
我正在比较2个字符串,其中一个是我分配的,第二个是从表中取出的。
我将其转换为十六进制后,表格中的那个显示了“ 00”符号,例如example 1400210068008100。我希望在字符串比较期间删除那些空字符。我尝试使用replace,trim但这并没有帮助我,唯一起作用的是使用LIKE,但这并不安全。
所以我的问题是,如何从从表中获取的字符串中删除不需要的“ 00”字符?
您可能正在混合VARCHAR(1字节扩展ASCII)和NVARCHAR(2字节unicode)编码。看一下这个:
SELECT CAST(N'hello' AS VARBINARY(MAX)) --look at the N in front of the literal!
,CAST( 'hello' AS VARBINARY(MAX))
"hello" as NVARCHAR: 0x680065006C006C006F00
"hello" as VARCHAR: 0x68656C6C6F
Run Code Online (Sandbox Code Playgroud)
将您的二进制文件强制转换为NVARCHAR(MAX),先将其强制转换VARCHAR(MAX)为VARBINARY(MAX)。
最好将字符串扩展为不包含双零,NVARCHAR(MAX)然后以unicode为基础进行比较。否则,如果您的字符串包含特殊字符(例如0x14...),则可能会遇到麻烦