我有一张表,出于某种原因将文本存储为IMAGE。我可以抓取数据并使用
读取它SELECT CONVERT(NVARCHAR(MAX), CONVERT(VARBINARY(MAX), column,2)) FROM table
现在我需要将数据插回到表中。我试过了
SELECT CONVERT(IMAGE, CAST('TEST TEXT' AS VARBINARY(MAX)))
但是当我测试使用
将其转换回来时SELECT CONVERT(NVARCHAR(MAX), CONVERT(VARBINARY(MAX), CONVERT(IMAGE, CAST('TEST TEXT' AS VARBINARY(MAX))),2))
它返回䕔呓吠塅显然不对,因为它应该返回" TEST TEXT"
我在这里做错了什么?
答案 0 :(得分:2)
您尝试存储的文字被编码为二进制ASCII
个字符。您尝试将其转换回Unicode
文字字符串,该字符串不是原来的字符串,因此您会收回乱码文本。
通过在其前面添加N来将源文本字符串更改为Unicode
字符串:
SELECT CONVERT(NVARCHAR(MAX), CONVERT(VARBINARY(MAX), CONVERT(IMAGE, CAST(N'TEST TEXT' AS VARBINARY(MAX))),2))
它应该返回正确的文本。在SQL Server 2008上测试了这个
答案 1 :(得分:1)
你可以使用这个:
SELECT CONVERT(**VARCHAR(MAX)**, CONVERT(VARBINARY(MAX), **CAST('TEST TEXT' AS IMAGE)**,**0**))
基本上,您与字符类型转换不一致。在某些部分,您使用了NVarChar和一些零件Varchar。此外,最后的数字2正在影响结果。在转换语句中,如果未指定代码,则使用默认值(0)。因此,如果要将其转换回来,则应使用相同的代码。