2016-09-28 34 views
1

我有一张表格出于某种原因将文字存储为图像。我可以抓取数据并使用它读取将文本转换为图像数据类型

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)) 

它返回䕔呓吠塅这显然是不正确的,因为它应该返回“测试文本”

什么我在这里做错了吗?

回答

1

您试图存储的文本被编码为二进制ASCII个字符。您正试图将其转换回Unicode文本字符串,这不是它原来的样子,因此您会收到乱码文本。

更改您的源文本字符串转换为Unicode串在它前面加上N:

SELECT CONVERT(NVARCHAR(MAX), CONVERT(VARBINARY(MAX), CONVERT(IMAGE, CAST(N'TEST TEXT' AS VARBINARY(MAX))),2))

应该返回正确的文本。 SQL服务器上测试该2008

1

您可以使用此一: SELECT CONVERT(VARCHAR(MAX),CONVERT(VARBINARY(MAX),CAST( '测试文本' 作为图像),) )

基本上,你和你的角色类型转换不一致。在一些地方你使用NVarChar和一些零件Varchar。另外,最后的数字2会影响结果。在您转换语句时,如果不指定代码,则使用默认值(0)。所以如果你将它转换回来,你应该使用相同的代码。