代码之家  ›  专栏  ›  技术社区  ›  Loftx

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

  •  0
  • Loftx  · 技术社区  · 15 年前

    我在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 回复  |  直到 9 年前
        1
  •  1
  •   devio    15 年前

    了解什么是SQL Server 真正地 商店,使用

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

    我只是用了斜体字和阿拉伯语(从维基百科抄袭过来,我不知道)作为普通字符串和N’’Unicode字符串。

    结果是,在转换为varchar的过程中,阿拉伯非Unicode字符串实际上是问号(0x3f)。

        2
  •  1
  •   SQLMenace    15 年前

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

    通常,如果SSMS不能显示,它应该是框而不是?

        3
  •  0
  •   Piotr Rodak    15 年前

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