من می خوام یه تو یه فیلد از نوع nvarchar جستجو انجام بدم تو sql server 2005 و از دستور LIKE استفاده می کنم ولی وقتی کلمه مورد جستجو حرف 'ی' توش بکار می ره نتیجه ای بر نمی گردونه! چیکار باید بکنم؟
Printable View
من می خوام یه تو یه فیلد از نوع nvarchar جستجو انجام بدم تو sql server 2005 و از دستور LIKE استفاده می کنم ولی وقتی کلمه مورد جستجو حرف 'ی' توش بکار می ره نتیجه ای بر نمی گردونه! چیکار باید بکنم؟
ی و ک = مکافات، مصیبت.
ببینید، ما یه "ی" داریم و یه "ي". همینطور یه "ک" داریم و یه "ك". هر کدوم اینها کد جداگانه ای دارند. ممکنه دلیل این اتفاق این باشه که شما در هنگام وارد کردن اطلاعات از فونتی استفاده کردید که از یکی از این "ی" ها استفاده می کنه، موقع کوئری گرفتن از فونتی استفاده می کنید که "ی" متفاوت داره. این کار هم دو راه داره : یکی اینکه همیشه از یک فونت ثابت مثل تاهوما هم برای ورود داده و هم برای پرس و جو استفاده کنید یا اینکه یه کد بنویسید که کاربر هر کدوم از این دو تا "ی" رو وارد کرد خودکار به "ی" مورد نظر شما تغییر کنه. تمام این صحبت ها در رابطه با کاف هم صادقه.
نا گفته پیداست که پیش از همه اینها باید از صحت کوئری و درستی collation اطمینان حاصل کرد.
کد اسکی این دو 'ی' با هم فرق می کند, شما باید در هنگام ورود و جستجوی اطلاعات کد اسکی فیلد وارد شده را پیدا کرد و کد اسکی هر دو را به یکی تبدیل کرد - توجه شود که این موضوع هم در هنگام ورود اطلاعات و هم در هنگام جستجو انجام شود
من اطلاعات رو تو خود sql server وارد می کنم و همون جا کوئری می گیرم بازم مشکل هست ، در ضمن به همه "ی" هایی که با دستور charmap اومد امتحان کردم بازم حل نشد . می تونید بگید بهترین collation برای زبان فارسی چیه؟
چون Arabic های زیادی هست کدو رو باید استفاده کنم؟
این هم کوئری ساده شده من:
SELECT fname, lname, pname
FROM dbo.karamuz
WHERE (fname LIKE '%علی%')
از کد زیر واسه یکسان کردن مقادیر عربی و فارسی استفاده بکنید
declare @tbl nvarchar(max)
,@col nvarchar(max)
declare tbl_cursor cursor
for
select
a.name,
b.name
from
sysobjects a,
syscolumns b
where a.id=b.id
and a.xtype='u'
and b.xtype=231
open tbl_cursor
fetch next from tbl_cursor into @tbl,@col
while(@@FETCH_STATUS=0)
begin
exec('update ['+@tbl+'] set ['+@col+']=replace('+@col+',nchar(1111),nchar(2222))')
fetch next from tbl_cursor into @tbl,@col
end
close tbl_cursor
منبع
من همیشه arabic_ci_as رو انتخاب می کنم که به معنی عربی-غیر حساس به کوچک وبزرگ-نزولی می باشد
ممنون از کدتون ولی فایده ای نداره ، query اجرا شد ولی تاثیری نداشت
کسی می دونه چه باید بکنم؟
برای تحویل پروژه 5 روز دیگه بیشتر وقت ندارم!
سلام دوست عزیزم،
به نظرم دوستان راهنمایی مناسب رو ارائه دادند. با دستور Update مقادیر درست رو جایگزین کنید (مثلا با تابع replace) و موقع ورود اطلاعات و همچنین جستجو از N استفاه کنید:
select * from mytable where mycol=N'تست'