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

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


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

#1 楼

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

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

#2 楼

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

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

#3 楼

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