PDA

View Full Version : مشکل با داده های فارسی در Sql Server 2008



mohsenashkboos
سه شنبه 10 شهریور 1388, 15:59 عصر
با سلام
دوستان من در Sql می خوام Query بنویسم مثلا کوئری زیر :



select *
From Tbl
where Field = 'کریمی'






را که مینویسم داده ها را استخراج نمیکند . چه کنم مشکل با داده های فارسی بر طرف شود؟؟؟!!!

ir.Melisa
سه شنبه 10 شهریور 1388, 17:42 عصر
با سلام
دوستان من در Sql می خوام Query بنویسم مثلا کوئری زیر :




select *
From Tbl
where Field = 'کریمی'

را که مینویسم داده ها را استخراج نمیکند . چه کنم مشکل با داده های فارسی بر طرف شود؟؟؟!!!


قبلنا در SqlServer2000 که داده ها رو دستی در جداول وارد میکردیم...این مشکلات پیش می آمد...چون یک Space کوچولو کافی بود که کوئری ها و پروسیجر ها روی اون داده جواب نده... ولی در Sql Server2008 اگه نکته فارسی کردن بانک ها رو رعایت کرده باشی چه موقع نصب Sql Server و چه موقع ساخت بانک فکر نکنم مشکلی پیش بیاد..

من که با اینکار مشکلی دیگه با فارسی نداشتم تا حالا..
این لینک هم برای مطالعه بیشتر مطالعه کنید.


http://forum.dpiguide.com/ftopict-1811.htmlموفق باشید

mohsenashkboos
جمعه 13 شهریور 1388, 13:46 عصر
با تشکر از جوابتون. اما من نکته فارسی کردن بانک را رعایت کردم . ولی بازم موقعی که یک کوئری مینویسم آن رکورد مورد نظر را بازیابی نمی کند؟؟!!!؟!؟!

mohsenashkboos
جمعه 13 شهریور 1388, 19:11 عصر
این کار رو کردم درست نشد؟؟!!

shahinghorbani
شنبه 14 شهریور 1388, 00:08 صبح
N قبل از هر دبل کوتیشن بیاد فک کنم درست میشه من مشکل داشتم درست شد یک زمانی

mohsenashkboos
شنبه 14 شهریور 1388, 01:15 صبح
ممنون از کمکتون آقای Shahinghorbani.درست شد.:لبخندساده:

ir.Melisa
شنبه 14 شهریور 1388, 11:49 صبح
N قبل از هر دبل کوتیشن بیاد فک کنم درست میشه من مشکل داشتم درست شد یک زمانی
راست گفتند...من هم یه زمانی از این روش استفاده می کردم...در SqlServer2000 انجام می دادیم... یادم رفته بود این روش هم هست.:لبخند: شرمنده:چشمک:

masudafsar
پنج شنبه 23 مرداد 1393, 15:14 عصر
N قبل از هر دبل کوتیشن بیاد فک کنم درست میشه من مشکل داشتم درست شد یک زمانی

کار کرد ممنون،
کار این N دقیقا چیه؟

راستی چرا تو تالار SQL Server نمیشه تاپیک ایجاد کرد؟

مسوت شاهینی
دوشنبه 17 فروردین 1394, 08:35 صبح
چرا باید از N استفاده کرد؟ میشه کاری کرد که احتیاج به N نباشه؟

SabaSabouhi
سه شنبه 18 فروردین 1394, 10:45 صبح
چرا باید از N استفاده کرد؟ میشه کاری کرد که احتیاج به N نباشه؟

سلام
یک رشته‌ی عادی از Codepage پیش‌فرض سیستم استفاده می‌کنه. هر حرف فارسی معادل یک عدد بین 128 تا 255 می‌شه توی codepage فارسی.
طبیعی هست که اگه لازم باشه یه زبون دیگه مثلاً هندی رو هم داشته باشیم به مشکل می‌خوریم. چون CodePage باید یا فارسی باشه یا هندی.
نیمه‌ای اول کدها یعنی از 1 تا 127 مربوط به کدهای عادی انگلیسی هست و نیمه‌ی دوم کدها ( از 128 تا 255 ) مربوط به زبان‌های متفرقه.
مثلاً زبان‌های آلمانی، ترکی، هلندی که پایه‌ی مشترکی با زبان‌ انگلیسی دارن از حروفی استفاده می‌کنن که جزو حروف عادی نیست و چیزهایی به
اون‌ها اضافه شده مثل دو تا نقطه یا یک سرکج بالا یا پایین یک حرف. برای هر کدوم از این زبان‌ها یک CodePage ساخته شده.
و اما Unicode
تو Unicode ساختار عوض شده و توی رشته‌ها بجای یک بایت برای هر حرف، دو بایت نگهداری می‌شه. باید اول CodePage رو مشخص می‌کنه و
بایت دوم عدد مربوطه رو. به همین دلیل هست که شما می‌تونین توی یک متن هم آلمانی داشته باشین، هم فارسی، هم هندی، هم چینی.

تو Sql برای این که مشخص بشه یک رشته عادی هست ( یعنی با CodePage پیش‌فرض ) یا Unicode از این N استفاده می‌شه.
رشته‌ی 'صبا صبوحی' یک رشته‌ی عادی هست به طول 9 کاراکتر
اما رشته‌ی 'صبا صبوحی'N یک رشته‌ی unicode هست و به طول 18 کاراکتر.

توصیه می‌شه که برای عبارت‌هایی که نیازی به حروف غیر انگلیسی نیست از varchar و در غیر این صورت از nvarchar استفاده بشه.
مثلاً فرض کنیم که قراره فهرستی از فرم‌های برنامه رو نگهداری کنیم ( برای دادن دسترسی ). طبیعی هست که نام فرم‌ها حتماً انگلیسی هستن
پس نیازی نیست unicode باشه. اما اگه بخواهیم نام اشخاص رو نگهداری کنیم بهتره از nvarchar استفاده بشه.

امیدوارم که توضیح کافی بوده باشه.

صبا صبوحی