# پایگاه‌های داده > SQL Server >  مشكل ي در جستجو كردن

## mahdighasemi

سلام دوستان
وقتي اطلاعات در بانك SQL 2000 ذخيره مي شود براي كلمتي كه حرف ي در آنها بكار رفته جستجو گر مشكل پيدا ميكند آيا بدون استفاده از DLLهاي استاندارد سازي كيبورد روش ديگري هم هست

----------


## ehsaniran59

من هم با این مشکل در SQL 2005 روبرو هستم . وقتی در خود محیط SQL کلماتی با ی درج می کنم در #C آن کلمات موقع جستجو پیدا نمی شود ... ممنون از راهنمایی دوستان !

----------


## alishirazi

من این مشکل رو داشتم ، و ی هایی که از C#‎ اضافه بشن و ذخیره بشن در db مشکلی ندارن، پس یه راه اینکه از طریق applicationات و C#‎ ی رو بنویسی

----------


## ehsaniran59

ممنون از راهنمایی شما ، مسئله اینه که ما نیاز داریم بعضی مقادیر را در یک Store 
Procedure بصورت پیش فرض درج کنیم . پس مشکل به قوت خودش باقیه !!!
اگه راه دیگه ای هست دوستان راهنمایی کنند !

----------


## mannai29

دلیل و ریشه مشکل، وجود 2 تا ی با کدهای اسکی متفاوته.
بنابراین شما اگر کد اسکی هر دو تا ی رو بدست بیارین مینونین در جستجوها ازش استفاده کنین یا اینکه در درج کنترل کنین و یا هر پردازش دیگری...
مثلا در جستجو بجای  ی اول  کد اسکی ی دوم را جایگزین در دستور جستجو بکنید.

----------


## sara_B

با سلام
من خودم اين مشكل رو ندارم،اما همونطور كه mannai29 هم گفتن ، دو نوع حرف "ي" داريم :
1- *ي*
2-*ی*
مثلا روي كيبورد من، دكمه ي "D" همون حرف "*ي*" هست ، ولي " Shift+V" حرف "*ی*" .
حالا تست كنيد كه با كدوم "ي" مشكل حل ميشه و موقع درج مقادير توي SQL از همون "ی" استفاده كنيد .
اميدوارم مشكل حل بشه!

----------


## ASKaffash

سلام 
همانطور که دوستان گفتند دو نوع وجود دارد پس در شرط جستجو با تابع Replace باید هردو ی را به یک ی تبدیل کرد.

----------


## ehsaniran59

ممنون از کمک دوستان

----------


## abi_sarab

آقا شما دیتا تایپ فیلدتون رو چی میگیرید؟ که این مشکل رو دارید؟ من که ندارم.

----------


## ehsaniran59

فیلدهای ما از نوع nvarchar تعریف شده !

----------


## محمدصالح

اشكال از اينجا پيش مياد كه شما ديتا رو مثلا با "ي" اول وارد كرديد و با "ي" دوم دنبال اون مي گرديد.اگر هر دو يكي باشند مشكل پيش نمياد.به خاطر اينكه ما حداقل دو نوع فايل Kbdfa.dll داريم. اوني كه حجمش بيشتره بهتره.روي هر سيستم يك نسخه از اين فايل نصبه در system32. بايد روي همه سيستمهاتون يك نوع kbdfa.dll نصب باشه.اينطوري مشكل پيش نمياد. راه دومش هم همونيه كه دوستمون گفتن: شما هنگام ورود ديتا و جستجو كد اسكي ي مورد نظر رو خودتون جايگزين كنين.

----------


## masoud.ramezani

سلام

به لینکهای زیر مراجعه نمایید. شاید به شما کمک کند :

http://afsharm.blogspot.com/2008/12/blog-post.html
http://afsharm.blogspot.com/2008/12/blog-post_21.html

----------


## bad_boy_2007

سلام دوستان
لازم میدونم توضیحاتی بدم
به حروف "ی" فارسی و "ي" عربی - "ک" فارسی و "ك" عربی دقت کنید .
در بین حروف عربی حرف "ی" با دو نقطه در زیر و حرف "ک" با همزه در دل این حرف هستند که کد کاراکتر های متفاوتی با حروف معادل خود در فارسی دارند .
من هم همین مشکل رو تو دیتابیس هام داشتم چون حجم داده هام خیلی نبود و هر جدول بیش از 2000 رکورد بیشتر نداشت با اجرای این تابع هیچ تفاوتی در سرعت خروجی مشاهده نکردم توصیه میکنم تستش کنید :


CREATEFUNCTION [dbo].[FixString]
(
-- Add the parameters for the function here
@In Varchar(max)
)
RETURNSvarchar(max)
AS
BEGIN
RETURNreplace(replace(@in,'ک','ك'),'ی','ي')
END


اگر حجم داده هاتون زیاده و این تابع باعث افت سرعت برنامه تون میشه که بعید میدونم ، میتونید یک بار این تابع رو روی فیلدهای دیتابیستون پیاده کنید که حروف "ی" و "ک" صحیح جایگزین حروف معادل عربی آنها شود .

----------


## mom alone

این کد رو کجا بنویسیم
فکر می کنم sql هست بعدا چجوری با برنامه اجرا کنیم 
شرمنده من تو sql  مبتدی هستم

----------

