SQL查询无法检索仅含表情符号的消息,空值判断异常问题排查
问题解决:仅含表情符号的消息无法被
pushMessage <> ''匹配 你遇到的问题是SQL Server中部分排序规则会将Unicode表情符号(比如👍)判定为与空字符串等价的字符,导致pushMessage <> ''的条件无法匹配这类记录。
解决方案
可以通过以下几种方式修改查询,确保能检索到仅含表情符号的消息:
使用
LEN()函数判断字符长度LEN()会准确计算字符串的实际字符数,不受排序规则的等价判断影响:select top 10 * from t_MemberApp_PushNotifications where contactID = 10930547 and LEN(pushMessage) > 0 order by 1 desc使用
DATALENGTH()函数判断字节数
对于nvarchar类型的字段,每个Unicode字符占2字节,通过字节数大于0可以有效判断非空:select top 10 * from t_MemberApp_PushNotifications where contactID = 10930547 and DATALENGTH(pushMessage) > 0 order by 1 desc强制二进制排序规则比较
指定二进制排序规则,让数据库直接按字符的二进制值进行比较,避免排序规则导致的等价转换:select top 10 * from t_MemberApp_PushNotifications where contactID = 10930547 and pushMessage COLLATE Latin1_General_BIN <> '' order by 1 desc
原因说明
SQL Server的部分默认排序规则(如SQL_Latin1_General_CP1_CI_AS)会将一些Unicode特殊字符(包括表情符号)归类为“非显著”字符,在字符串比较时会被忽略,导致pushMessage <> ''的条件认为这类字符和空字符串等价。而上述三种方法分别从字符数、字节数、二进制值三个层面绕过了这个等价判断逻辑,从而能正确匹配到仅含表情符号的记录。
内容的提问来源于stack exchange,提问作者Aqib Murtaza
相关产品推荐
相关产品推荐

