I know字符串需要在SQL Server(2012)INSERT语句中以N'为前缀,以将它们存储为UNICODE,但是它们必须以某种方式检索(SELECT语句),因此它们是在UNICODE?
我能够使用N表示法正确存储国际字符串,但是当我运行SELECT查询以获取记录时,它会作为问号出现。我的查询非常简单。
SELECT COLUMN1, COLUMN2 FROM TABLE1
我正在考虑可能导致此问题的其他可能原因,但至少我想要消除上面的SQL语句。当它们都使用N表示法存储UNICODE字符串时,它应该正确读取COLUMN1和COLUMN2列吗?我是否必须对声明做任何事情来告诉它它们是UNICODE?
答案 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
应用程序代码中的转换失败。一定要重新访问它。