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被设计为使扩展的字符集仍可以“适合”数据库列。