从SQL Server读取Unicode字符串

时间:2016-05-03 17:06:59

标签: sql sql-server database select unicode

I know字符串需要在SQL Server(2012)INSERT语句中以N'为前缀,以将它们存储为UNICODE,但是它们必须以某种方式检索(SELECT语句),因此它们是在UNICODE?

我能够使用N表示法正确存储国际字符串,但是当我运行SELECT查询以获取记录时,它会作为问号出现。我的查询非常简单。

SELECT COLUMN1, COLUMN2 FROM TABLE1

我正在考虑可能导致此问题的其他可能原因,但至少我想要消除上面的SQL语句。当它们都使用N表示法存储UNICODE字符串时,它应该正确读取COLUMN1和COLUMN2列吗?我是否必须对声明做任何事情来告诉它它们是UNICODE?

2 个答案:

答案 0 :(得分:1)

在管理工作室内,您不需要做任何特殊的事情来显示正确的值。确保表中的列定义为Unicode字符串NVARCHAR而不是ANSI字符串VARCHAR。

以下示例演示了这个概念:

    CREATE TABLE UnicodeExample
    (
         MyUnicodeColumn NVARCHAR(100)
        ,MYANSIColumn VARCHAR(100)
    )

    INSERT INTO UnicodeExample
    (
         MyUnicodeColumn
        ,MYANSIColumn
    )
    VALUES
    (
        N'איש'
        ,N'איש'
    )

    SELECT *
    FROM    UnicodeExample

    DROP TABLE UnicodeExample

在上面的示例中,MyUnicodeColumn列定义为NVARCHAR(100),MYANSIColumn定义为VARCHAR(100)。查询将正确返回MyUnicodeColumn的结果但会返回???对于MYANSIColum。

答案 1 :(得分:0)

您的代码在SSMS中应该可以正常工作。如果没有,试试这个:

SELECT UNICODE(COLUMN1), UNICODE(COLUMN2) FROM TABLE1

应用程序代码中的转换失败。一定要重新访问它。