Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Непонятное поведение запроса с like и китайскими символами. Как победить?  [new]
Тангароа
Member

Откуда:
Сообщений: 4
Добрый день.

На одном из серверов Microsoft SQL Server 2005 - 9.00.3054.00 (Intel X86) Mar 23 2007 16:28:52 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 1) наблюдаю следующую вещь:

select K.ID KeywordID,
K.Keyword,
K.UserID
from Keywords K (nolock)
where K.Keyword like N'欧洲旅游'
and UserID=783
group by K.ID, K.Keyword, K.UserID

данных не выводит, хотя они есть.

В тоже время чуть-чуть измененный запрос выводит нужные данные:

declare @s1 nvarchar(20)
set @s1=N'欧洲旅游'
select K.ID KeywordID,
K.Keyword,
K.UserID
from Keywords K (nolock)
where K.Keyword like @s1
and UserID=783
group by K.ID, K.Keyword, K.UserID


На других серверах все нормально и такого поведения не наблюдается. Подозреваю, что проблема во временных таблицах, используемых в первом запросе (см: not work execution plan в аттаче).
Вопрос: как победить?

С уважением, Тангароа.

К сообщению приложен файл (exec_plan.zip - 3Kb) cкачать
4 сен 09, 10:59    [7616781]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение запроса с like и китайскими символами. Как победить?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Тангароа,

Приложите план в текстовом виде. И скажите, какие у Вас коллейшены на разных серверах.
4 сен 09, 11:04    [7616817]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение запроса с like и китайскими символами. Как победить?  [new]
Тангароа
Member

Откуда:
Сообщений: 4
Коллэйшн везде: Latin1_General_CI_AS

план неверно работающего запроса :
|--Merge Join(Inner Join, MERGE:([K].[ID])=([K].[ID]), RESIDUAL:([ROI].[dbo].[Keywords].[ID] as [K].[ID] = [ROI].[dbo].[Keywords].[ID] as [K].[ID]))
|--Index Seek(OBJECT:([ROI].[dbo].[Keywords].[index2] AS [K]), SEEK:([K].[Keyword] >= N'????' AND [K].[Keyword] <= N'????'), WHERE:([ROI].[dbo].[Keywords].[Keyword] as [K].[Keyword] like N'????') ORDERED FORWARD)
|--Index Seek(OBJECT:([ROI].[dbo].[Keywords].[IX_UserID] AS [K]), SEEK:([K].[UserID]=[@0]) ORDERED FORWARD)

план работающего запроса:
|--Hash Match(Inner Join, HASH:([K].[ID])=([K].[ID]))
|--Index Seek(OBJECT:([ROI].[dbo].[Keywords].[IX_UserID] AS [K]), SEEK:([K].[UserID]=(783)) ORDERED FORWARD)
|--Nested Loops(Inner Join, OUTER REFERENCES:(LikeRangeStart([@s1]), LikeRangeEnd([@s1]), LikeRangeInfo([@s1])))
|--Compute Scalar(DEFINE:([ConstExpr1002]=LikeRangeStart([@s1]), [ConstExpr1003]=LikeRangeEnd([@s1]), [ConstExpr1004]=LikeRangeInfo([@s1])))
| |--Constant Scan
|--Index Seek(OBJECT:([ROI].[dbo].[Keywords].[index2] AS [K]), SEEK:([K].[Keyword] > LikeRangeStart([@s1]) AND [K].[Keyword] < LikeRangeEnd([@s1])), WHERE:([ROI].[dbo].[Keywords].[Keyword] as [K].[Keyword] like [@s1]) ORDERED FORWARD)

С уважением, Тангароа.
4 сен 09, 11:26    [7616993]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение запроса с like и китайскими символами. Как победить?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> На других серверах все нормально и такого поведения не наблюдается.

а планы там такие же - буква в букву?

а попроще если ситуацию попробовать?
create table t (c nvarchar(max))
insert into t values (N'欧洲旅游')

select * from t where c like N'欧洲旅游'
go
drop table t
4 сен 09, 11:37    [7617084]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение запроса с like и китайскими символами. Как победить?  [new]
Тангароа
Member

Откуда:
Сообщений: 4
Решение найдено:

в пропертях базы - Options - Parameterization стояло Forced.
После замены на Simple все заработало как надо.

Всем спасибо. Вопрос снят.

С уважением, Тангароа.
4 сен 09, 11:46    [7617166]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение запроса с like и китайскими символами. Как победить?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
план неверно работающего запроса :


В плане реально вопросики, вместо иероглифов, или это форум глючит?
4 сен 09, 11:48    [7617178]     Ответить | Цитировать Сообщить модератору
 Re: Непонятное поведение запроса с like и китайскими символами. Как победить?  [new]
Тангароа
Member

Откуда:
Сообщений: 4
Да, в плане были реально вопросики вместо иероглифов.

С уважением, Тангароа.
4 сен 09, 11:49    [7617194]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить