ms sql 找到 unicode 0

ms sql find unicode 0

在数据库中写入了一个 unicode 0,然后开始查询以查找该值。 示例:

select *,Len(test) as length, Unicode(test) as unicode,DATALENGTH(test) as datalength 
from (values (NCHAR(0x0))) as t(test)
where test like N'_'

但没有返回值。为什么?我需要做什么才能起作用?

如果我是正确的,unicode 0 (NCHAR 0x0) 不算作字符,而是 NULL(但不是 SQL NULL 类型)。 通配符 _ 正在搜索替换 1 个字符,这意味着值需要至少有一个字符。删除 _ 会给你想要的结果。

这是 Pattern matching documentation 的预期行为:

0x0000 (char(0)) is an undefined character in Windows collations and cannot be included in LIKE.

但是请注意,LIKE CHAR(0) 确实有效

DECLARE @Character nchar(1);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE CHAR(0) THEN 1 ELSE 0 END;

DECLARE @Character nchar(10);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE '%' + CHAR(0) + '%' THEN 1 ELSE 0 END;

具体来说,文档说使用通配符(例如 '_' 表示 (N)CHAR(0) 将不起作用。