0

我在 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 中,我不知道它是什么!

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

谢谢,

汤姆

4

3 回答 3

1

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

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

于 2010-02-11T17:32:00.090 回答
1

要找出 SQL Server真正存储的内容,请使用

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

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

结果是,在转换为 VARCHAR 时,阿拉伯非 Unicode 字符串确实以问号 (0x3F) 的形式结束。

于 2010-02-11T19:48:41.030 回答
0

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

于 2010-02-11T19:34:46.550 回答