PDA

View Full Version : سوال: مشکل جستجوی حرف "ی"



koohbor_farhad
جمعه 12 تیر 1388, 17:38 عصر
سلام به دوستان
مشکل جستجوی حرف "ی"
من یه application با asp.net و C# نوشتم که از SQL SERVER 2005 به عنوان دیتابیس استفاده می کنه ، فیلدهای دیتابیس رو nvarchar انتخاب کردم . در یکی از قسمت های سایت کاربر میتونه عبارتی رو جستجو کنه . عمل جستجو در دیتابیس و بر اساس یکی از فیلدها به نام Abstract_body صورت میگیره ، حالا مشکل من اینه که اگه در عبارت مورد جستجو حرف "ی" وجود داشته باشه ، با این که متن اصلی حرف "ی" رو داره ، نتیجه ای پیدا نمیشه . کدی که جستجو رو انجام میده :
Select * from MyTable where Abstract_body like ' %"+TextBox_search.Text.Trim()+"% ' "
Collation دیتابیس Arabic هست .
پیشتر از کمک شما ممنونم.

kasmaii61
شنبه 13 تیر 1388, 10:01 صبح
دوست عزیز این مشکلی که شما داری از این ناشی میشه که ما دو نوع "ی" داریم. یکی "ی" فارسی و دیگری "ي" عربی . اگه دقت کنی "ي" عربی دو تا نقطه زیرش داره که با Shift + x درج میشه. این دو تا ی کد اسکیشون با هم فرق میکنه به خاطر همین وقتی کلمه ای که در پایگاه داده شما ذخیره شده یکی رو داشته باشه و در application شما کلمه ای که مورد جستجو قرار میدید مدل دیگر ی رو داشته باشه نمی تونه کلمه مورد نظر شما رو تو بانک پیدا کنه. این مشکل رو حتی برنامه های بزرگ هم دارن و من زیاد باهاش برخورد کردم
راه حل سهل الوصولش اینه که ببینی در حال حاضر سیستمی که application روش اجرا میشه چه نوع ی رو استفاده میکنه تمام ی های data base رو با توابع تبدیل کد اسکی به اون نوع ی تبدیل کنی
ولی این راه حل اشتباهه و اصلا نمیشه رو همه سیستم ها مدیریت داشت
راه حل اصولی اینه که ابتدا با توابع جایگزینی حرف تمام ی های data base رو یه دست کنی و بعد تو application کدی بنویسی که هنگام درج داده ها در بانک همیشه عملیات تبدیل ی صورت بگیره و کلماتی که تو بانک ذخیره میشه با یک نوع ی درج بشن
جداول کد اسکی حروف به وفور تو اینترنت موجود و توابع جایگزینی و تبدیل حروف رو هم می تونی تو همین بخش با جستجو پیدا کنی