Sql-Server-2019

結合全文搜尋和正常比較時結果不正確

  • July 21, 2020
create table "Foo"
(
"id" integer identity (1000, 1) not null,
"name" nvarchar(100) not null
)
alter table "Foo" add constraint "Foo_PK" primary key ("id");
create fulltext index on "Foo" ("name" language 0x0) key index "Foo_PK" on "catalog" with stoplist = off;

以下查詢不返回任何行

select * from "Foo" where contains("name", ' "پ*" ') and "id" > 1082;

雖然有 26 行匹配contains("name", ' "پ*" '),87行"id" > 1082單獨匹配。以下兩個查詢共有 23 行,奇怪的是,它們的交集沒有返回任何行。

select * from "Foo" where contains("name", ' "پ*" ');
select * from "Foo" where "id" > 1082;

更奇怪的是,下面的查詢正好返回 23 行。所有“id”都在 1082 以上。

select * from "Foo" where contains("name", ' "پ*" ') and "id" > 1081;

有人請解釋一下 SQL Server 中發生了什麼。

我認為您的主要問題是您對 Unicode 數據使用非 Unicode 字元串分隔符。

比較:

SELECT  ' "پ*" ';
SELECT N' "پ*" ';
-------^ this N is important

我可以簡單地通過刪除並再次創建索引來修復它。仍然不知道它為什麼會發生以及將來如何防止它發生。

引用自:https://dba.stackexchange.com/questions/271343