2010-02-11 55 views
0

我在SQL Server中含有需要包含Unicode数据的列的数据库(它包含了来自世界各地如القاهرة开罗用户的地址)如何恢复显示在SQL Server中的Unicode数据?

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

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

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

相反的:

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

我的印象是,统一将自动转换为nvarchar列,我并不需要这个前缀下,但是这似乎是不正确的。

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

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

感谢,

汤姆

回答

1

要找出SQL服务器真的店,使用

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

我只是umlauted字符和阿拉伯数字想这(从维基百科复制的,我不知道),均为普通字符串和N” 'Unicode字符串。

结果是,在转换为VARCHAR的过程中,阿拉伯语非Unicode字符串确实最终成为问号(0x3F)。

1

SSMS有时不会显示所有字符,我只是想你有什么,它的工作对我来说,复制并粘贴到Word中,它可能corectly显示它

通常如果SSMS不能显示它应该是盒子不是?

+0

单词显示与SSMS完全相同:“??????”。在我正确插入unicode数据的其他表中,我确实看到了阿拉伯字符。 – Loftx 2010-02-11 17:33:43

+1

然后,你可能运气不好 – SQLMenace 2010-02-11 17:37:16

+0

我不得不+1,1 SQLMenace的评论..因为这是我认为是不幸的答案是Loftx的问题... – Sung 2010-02-11 17:58:22

0

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

相关问题