PDA

View Full Version : سوال: مشکل با collation ها و "ی"



behnam-s
یک شنبه 11 مرداد 1388, 00:32 صبح
من می خوام یه تو یه فیلد از نوع nvarchar جستجو انجام بدم تو sql server 2005 و از دستور LIKE استفاده می کنم ولی وقتی کلمه مورد جستجو حرف 'ی' توش بکار می ره نتیجه ای بر نمی گردونه! چیکار باید بکنم؟

Rejnev
یک شنبه 11 مرداد 1388, 01:04 صبح
من می خوام یه تو یه فیلد از نوع nvarchar جستجو انجام بدم تو sql server 2005 و از دستور LIKE استفاده می کنم ولی وقتی کلمه مورد جستجو حرف 'ی' توش بکار می ره نتیجه ای بر نمی گردونه! چیکار باید بکنم؟


سلام من هم با همچین مشکلی بر خوردم و یادم نیست چطوری حلش کردم

p_ooya
یک شنبه 11 مرداد 1388, 02:46 صبح
ی و ک = مکافات، مصیبت.
ببینید، ما یه "ی" داریم و یه "ي". همینطور یه "ک" داریم و یه "ك". هر کدوم اینها کد جداگانه ای دارند. ممکنه دلیل این اتفاق این باشه که شما در هنگام وارد کردن اطلاعات از فونتی استفاده کردید که از یکی از این "ی" ها استفاده می کنه، موقع کوئری گرفتن از فونتی استفاده می کنید که "ی" متفاوت داره. این کار هم دو راه داره : یکی اینکه همیشه از یک فونت ثابت مثل تاهوما هم برای ورود داده و هم برای پرس و جو استفاده کنید یا اینکه یه کد بنویسید که کاربر هر کدوم از این دو تا "ی" رو وارد کرد خودکار به "ی" مورد نظر شما تغییر کنه. تمام این صحبت ها در رابطه با کاف هم صادقه.
نا گفته پیداست که پیش از همه اینها باید از صحت کوئری و درستی collation اطمینان حاصل کرد.

بهنام بهمنی
یک شنبه 11 مرداد 1388, 09:10 صبح
کد اسکی این دو 'ی' با هم فرق می کند, شما باید در هنگام ورود و جستجوی اطلاعات کد اسکی فیلد وارد شده را پیدا کرد و کد اسکی هر دو را به یکی تبدیل کرد - توجه شود که این موضوع هم در هنگام ورود اطلاعات و هم در هنگام جستجو انجام شود

behnam-s
یک شنبه 11 مرداد 1388, 12:59 عصر
کد اسکی این دو 'ی' با هم فرق می کند, شما باید در هنگام ورود و جستجوی اطلاعات کد اسکی فیلد وارد شده را پیدا کرد و کد اسکی هر دو را به یکی تبدیل کرد - توجه شود که این موضوع هم در هنگام ورود اطلاعات و هم در هنگام جستجو انجام شود

من اطلاعات رو تو خود sql server وارد می کنم و همون جا کوئری می گیرم بازم مشکل هست ، در ضمن به همه "ی" هایی که با دستور charmap اومد امتحان کردم بازم حل نشد . می تونید بگید بهترین collation برای زبان فارسی چیه؟
چون Arabic های زیادی هست کدو رو باید استفاده کنم؟

این هم کوئری ساده شده من:



SELECT fname, lname, pname
FROM dbo.karamuz
WHERE (fname LIKE '%علی%')

meysam_pro
یک شنبه 11 مرداد 1388, 13:30 عصر
از کد زیر واسه یکسان کردن مقادیر عربی و فارسی استفاده بکنید


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

منبع (http://vahidnasiri.blogspot.com)

بهنام بهمنی
یک شنبه 11 مرداد 1388, 13:32 عصر
من همیشه arabic_ci_as رو انتخاب می کنم که به معنی عربی-غیر حساس به کوچک وبزرگ-نزولی می باشد

behnam-s
یک شنبه 11 مرداد 1388, 14:00 عصر
ممنون از کدتون ولی فایده ای نداره ، query اجرا شد ولی تاثیری نداشت

meysam_pro
دوشنبه 12 مرداد 1388, 13:42 عصر
ممنون از کدتون ولی فایده ای نداره ، query اجرا شد ولی تاثیری نداشت

خب حتما فیلدهایی مقداری از کاراکترهای عربی و فارسی داشته باشن، نیست، وگرنه اسکریپت نوشته شده در نهایت دقت و صحت هستش.

behnam-s
دوشنبه 12 مرداد 1388, 14:23 عصر
خب حتما فیلدهایی مقداری از کاراکترهای عربی و فارسی داشته باشن، نیست، وگرنه اسکریپت نوشته شده در نهایت دقت و صحت هستش.

از اسکریپتی که نوشتین واقعا ممنونم ولی مشکل من هنوز حل نشده
از دوستان خواهش می کنم اگه راهی به نظرشون می رسه دریغ نکنند

behnam-s
چهارشنبه 14 مرداد 1388, 13:11 عصر
کسی می دونه چه باید بکنم؟
برای تحویل پروژه 5 روز دیگه بیشتر وقت ندارم!

AminSobati
پنج شنبه 15 مرداد 1388, 09:49 صبح
سلام دوست عزیزم،
به نظرم دوستان راهنمایی مناسب رو ارائه دادند. با دستور Update مقادیر درست رو جایگزین کنید (مثلا با تابع replace) و موقع ورود اطلاعات و همچنین جستجو از N استفاه کنید:


select * from mytable where mycol=N'تست'