请问我什么时候应该在Transact-SQL查询中的字符串前使用N前缀?我开始使用这样的查询无法获得任何结果的数据库
SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'
直到我将模式更改为N'%а_pattern%'
。我从不需要在以前添加此前缀,所以我很好奇。a_field
被定义为nvarchar(255)
,但我认为原因是其他原因。
请问我什么时候应该在Transact-SQL查询中的字符串前使用N前缀?我开始使用这样的查询无法获得任何结果的数据库
SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'
直到我将模式更改为N'%а_pattern%'
。我从不需要在以前添加此前缀,所以我很好奇。a_field
被定义为nvarchar(255)
,但我认为原因是其他原因。
Answers:
以下文章对此问题提供了一些很好的信息。简短的答案就是,您使用的unicode列和非unicode字符串文字之间存在类型不匹配。从KB文章看来,省略N前缀在某些情况下似乎仍然可以使用,但这取决于代码页和数据库的排序规则设置。如果您以前使用no-prefix方法成功,那么这可能可以解释行为上的变化。
这表示随后的字符串采用Unicode(N实际上代表本国语言字符集)。这意味着您传递的是NCHAR,NVARCHAR或NTEXT值,而不是CHAR,VARCHAR或TEXT。有关这些数据类型的比较,请参见文章2354。
Unicode通常在数据库应用程序中使用,这些数据库应用程序旨在简化代码页,这些代码页超出了英语和西欧代码页的范围,例如中文。Unicode的设计使扩展字符集仍可以“适合”数据库列。