Transact-SQL查询中字符串前的N前缀


41

请问我什么时候应该在Transact-SQL查询中的字符串前使用N前缀?我开始使用这样的查询无法获得任何结果的数据库

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

直到我将模式更改为N'%а_pattern%'。我从不需要在以前添加此前缀,所以我很好奇。a_field被定义为nvarchar(255),但我认为原因是其他原因。

Answers:


31

以下文章对此问题提供了一些很好的信息。简短的答案就是,您使用的unicode列和非unicode字符串文字之间存在类型不匹配。从KB文章看来,省略N前缀在某些情况下似乎仍然可以使用,但这取决于代码页和数据库的排序规则设置。如果您以前使用no-prefix方法成功,那么这可能可以解释行为上的变化。

https://support.microsoft.com/zh-CN/kb/239530


6

这表示随后的字符串采用Unicode(N实际上代表本国语言字符集)。这意味着您传递的是NCHAR,NVARCHAR或NTEXT值,而不是CHAR,VARCHAR或TEXT。有关这些数据类型的比较,请参见文章2354。

Unicode通常在数据库应用程序中使用,这些数据库应用程序旨在简化代码页,这些代码页超出了英语和西欧代码页的范围,例如中文。Unicode的设计使扩展字符集仍可以“适合”数据库列。


3

我认为N前缀告诉sql server将字符串视为unicode值。nvarchar列是unicode,因此在访问这些列时应使用此语法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.