You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何通过WHERE子句查询含特殊字符●●●●●●●●的记录

SQL Server检索特殊Unicode字符无结果的解决方案

核心原因

查询无法返回目标记录的本质是筛选条件的字符串字面量未声明为Unicode类型:

  • 字段中存储的●是Unicode特殊字符(码位U+25CF),属于双字节字符,通常存储在nvarchar/nchar类型字段中
  • 当筛选值写为'●●●●●●●●'、不带N前缀时,SQL Server会将该字符串按数据库默认的非Unicode代码页做隐式转换,这类不在非Unicode代码页中的特殊字符会被转换为默认占位符,和字段内实际存储的Unicode值无法匹配,因此返回空结果。

可直接生效的查询写法

在字符串字面量前增加N前缀,显式标记其为Unicode类型字符串即可命中记录:

USE [Kinetics_model2]
GO

SELECT [Id]
      ,[lastPort]
      ,[nextPort]
FROM [dbo].[Observation]
WHERE lastPort = N'●●●●●●●●'

同形字符干扰的排查方案

如果加N前缀后仍无法命中,说明界面显示的●是视觉效果一致但Unicode码位不同的同形字符(如其他类型的圆点、控制字符、私有码位字符等),可先解析目标记录的实际字符编码,避开视觉识别误差:

-- 定位到已知的目标记录,逐位解析lastPort字段的实际字符编码
SELECT 
    Id,
    lastPort,
    UNICODE(SUBSTRING(lastPort, 1, 1)) AS pos1_code,
    UNICODE(SUBSTRING(lastPort, 2, 1)) AS pos2_code,
    UNICODE(SUBSTRING(lastPort, 3, 1)) AS pos3_code,
    UNICODE(SUBSTRING(lastPort, 4, 1)) AS pos4_code,
    UNICODE(SUBSTRING(lastPort, 5, 1)) AS pos5_code,
    UNICODE(SUBSTRING(lastPort, 6, 1)) AS pos6_code,
    UNICODE(SUBSTRING(lastPort, 7, 1)) AS pos7_code,
    UNICODE(SUBSTRING(lastPort, 8, 1)) AS pos8_code
FROM [dbo].[Observation]
WHERE Id = 10088

拿到准确的字符编码后,可以直接通过编码构造筛选条件,完全绕开同形字符的干扰,例如此前确认所有字符都是U+25CF的黑圆点时,查询可写为:

SELECT [Id], [lastPort], [nextPort]
FROM [dbo].[Observation]
WHERE lastPort = REPLICATE(NCHAR(0x25CF), 8)

内容的提问来源于stack exchange,提问作者AlwaysResearching

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:24:26