我在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中,我不知道它是什么!
数据是否仍然存在,但是字符编码不正确,导致它无法显示但仍然可以挽救(如果可以,我该如何恢复?),还是它已经消失了?
谢谢,
汤姆
答案 0 :(得分:1)
SSMS有时候不会显示所有字符,我只是尝试了你所拥有的并且它对我有用,将它复制并粘贴到Word中它可能会显示它
通常如果SSMS无法显示它,它应该不是框?
答案 1 :(得分:1)
要了解SQL Server 真正存储的内容,请使用
SELECT CONVERT(VARBINARY(MAX), 'some text')
我只是尝试使用声称字符和阿拉伯语(从维基百科复制,我不知道)作为普通字符串和N''Unicode字符串。
结果是阿拉伯语非Unicode字符串在转换为VARCHAR时最终成为问号(0x3F)。
答案 2 :(得分:0)
尝试编写一个小客户端,将这些数据检索到文件或网页。如果在将数据存储到表中之前没有可能将数据转换为varchar的其他插入或更新,请检查所有代码。