我什么时候应该使用SQL Server Unicode'N'常量?

时间:2010-02-09 10:49:55

标签: sql sql-server sql-server-2005

我一直在研究在我的代码中使用Unicode'N'常量,例如:

select object_id(N'VW_TABLE_UPDATE_DATA', N'V');

insert into SOME_TABLE (Field1, Field2) values (N'A', N'B');

在阅读了何时使用它之后,我仍然不完全清楚应该和不应该使用它的情况。

当数据类型或参数需要unicode数据类型时(根据上面的示例),它是否像使用它一样简单,或者它是否比它更具有sophiticated?

以下Microsoft站点给出了解释,但我对它正在使用的一些术语有点不清楚 http://msdn.microsoft.com/en-us/library/ms179899.aspx

或者说:

  

Unicode常量被解释为   Unicode数据,不进行评估   使用代码页。 Unicode常量   有一个整理。这种整理   主要控制比较和   区分大小写。 Unicode常量   被分配默认排序规则   当前的数据库,除非   COLLATE子句用于指定a   排序规则。

这是什么意思:

  • '使用代码页进行评估'?
  • 整理?

我意识到这是一个相当广泛的问题,但任何链接或帮助都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:1)

Is it as simple as using it when data types or parameters expect a unicode data type

非常。

回答你的其他观点:

code page是字符集编码的另一个名称。例如,windows code page 1255编码希伯来语。这通常用于8位字符编码。就您的问题而言,可以使用不同的代码页来评估字符串(因此相同的位模式可以被解释为日语字符或阿拉伯语字符,具体取决于用于评估它的代码页)。

Collation是关于SQL Server如何排序字符串 - 这取决于代码页,因为您将以不同的语言对不同语言的字符串进行排序。有关示例,请参阅this article

答案 1 :(得分:1)

国家字符nchar()和nvarchar()每个字符使用两个字节并支持国际字符集 - 思考互联网。 N 前缀将字符串常量转换为每个字符两个字节。因此,如果您有来自不同国家/地区的人,并希望正确存储他们的名称,例如:

CREATE TABLE SomeTable ( 
   id int
  ,FirstName nvarchar(50)
  );

然后使用:

INSERT  INTO SomeTable
        ( Id, FirstName )
VALUES  ( 1, N'Guðjón' );

SELECT  *
FROM    SomeTable
WHERE   FirstName = N'Guðjón';