SQL Select语句中的字符行为异常

SQL Select语句中的字符行为异常,sql,sql-server,where,collation,Sql,Sql Server,Where,Collation,我对一些select语句,或者更准确地说,它们返回的内容有疑问 我尝试使用where子句从名称字段中检索空白的汉字字符行,如下所示: name IS NULL OR name = '' 我知道还有其他方法可以做到这一点,我也尝试过这些方法,但这会返回我所需要的,除了这个 䑓 当我使用上面的字符搜索数据库时,它会返回自身和空白行。其他角色似乎都没有这种行为 有人建议,这可能是一个排序问题。列排序规则设置为Latin_General_CI_AS 真的只是寻找一个原因,为什么一个角色的行为会与其他

我对一些select语句,或者更准确地说,它们返回的内容有疑问

我尝试使用where子句从名称字段中检索空白的汉字字符行,如下所示:

name IS NULL OR name = ''
我知道还有其他方法可以做到这一点,我也尝试过这些方法,但这会返回我所需要的,除了这个

当我使用上面的字符搜索数据库时,它会返回自身和空白行。其他角色似乎都没有这种行为

有人建议,这可能是一个排序问题。列排序规则设置为Latin_General_CI_AS

真的只是寻找一个原因,为什么一个角色的行为会与其他角色不同

如果需要更多信息,请询问。

为什么不试试

isnull(name, '') = ''
更新

isnull(nullif(name, '䑓'), '') = ''

如果我是对的,Latin1通用代码页是windows-1252。这个代码页中的所有字符都列在这里:-所以我认为汉字字符被分割成多个匹配CP1252的字符。甚至可能超出有效字符范围。好奇。选择1,其中N'䑓' = N确实返回1。选择1,其中N'䑓' = 当然,核对拉丁语1\u General\u BIN2不需要。但即使是整理日文辞典也认为这是空白。在我的机器上,核对日文的“Bushu”和“Kakusu”140“CS”和“AI”。然而,这是可行的-我不是日文整理专家。您可以使用DATALENGTH=0测试真正的空白,但我非常确定这不能用于索引查找。当它与=N组合时可能会出现。如果您使用name=N?它是如何运行的?@JimmyPop13然后你必须在SQL Server 2012上使用排序规则-对于我来说,SQL Server 2012已经足够旧了,col为NULL或col=N和col=N COLLATE拉丁语1\u General\u BIN2仍将使用列上的索引,而仅使用_BIN2将不会。YMMV,但这似乎是一个很有前途的方法。这只是一个性能较差的版本,其中Name=或Name为NULL,并不能解决根本问题。ISNULLN'䑓', = 这仍然是事实。