如何恢复在SQL Server中显示的Unicode数据?

时间:2010-02-11 17:29:41

标签: sql-server sql-server-2005 unicode collation nvarchar

我在SQL Server中有一个数据库,其中包含一个需要包含Unicode数据的列(它包含来自世界各地的用户地址,例如开罗的القاهرة)

此列是一个nvarchar列,其中包含数据库默认值(Latin1_General_CI_AS),但我注意到通过包含非英文字符的SQL语句将数据插入其中并显示为?????。

解决方案似乎是我没有使用n前缀,例如

INSERT INTO table (address) VALUES ('القاهرة')

而不是:

INSERT INTO table (address) VALUES (n'القاهرة')

我的印象是Unicode会自动转换为nvarchar列,我不需要这个前缀,但这看起来不正确。

问题是我在这个专栏中仍然有一些数据显示为?????在SQL Server Management Studio中,我不知道它是什么!

数据是否仍然存在,但是字符编码不正确,导致它无法显示但仍然可以挽救(如果可以,我该如何恢复?),还是它已经消失了?

谢谢,

汤姆

3 个答案:

答案 0 :(得分:1)

SSMS有时候不会显示所有字符,我只是尝试了你所拥有的并且它对我有用,将它复制并粘贴到Word中它可能会显示它

通常如果SSMS无法显示它,它应该不是框?

答案 1 :(得分:1)

要了解SQL Server 真正存储的内容,请使用

SELECT CONVERT(VARBINARY(MAX), 'some text')

我只是尝试使用声称字符和阿拉伯语(从维基百科复制,我不知道)作为普通字符串和N''Unicode字符串。

结果是阿拉伯语非Unicode字符串在转换为VARCHAR时最终成为问号(0x3F)。

答案 2 :(得分:0)

尝试编写一个小客户端,将这些数据检索到文件或网页。如果在将数据存储到表中之前没有可能将数据转换为varchar的其他插入或更新,请检查所有代码。