دسته بندی ها
12:35 1401/02/23

نمایش علامت سوال به جای حروف فارسی در Sql Server

مشخصات سوال کننده :
کاربر : Mortezahkalate     امتیاز کاربر : 0     رتبه کاربر : 7059
دسته بندی : Sql Server

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 6400
3 نظر
fateme : موقع ایجاد دیتابیس Collation رو چی قرار دادید ؟ نکته بعدی اینکه آیا فیلدها رو به صورت varchar تعریف کردید یا nvarchar ؟

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 12:46 1401/02/23
Mortezahkalate : از nvarchar استفاده شده است و به روش کدفرس هس

امتیاز کاربر : 0   رتبه کاربر : 7059   تاریخ ثبت : 01:28 1401/02/23
fateme : خب DataType رو به varchar تغییر بدید و تست کنید. یا اینکه یه فیلد جدید با datatype از نوع varchar ایجاد کنید و روش تست کنید ببینید کار میکنه یا نه.

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 03:01 1401/02/23
ادامه نظرات ...
هوش مصنوعی

پاسخ هوش مصنوعی

مشکل نمایش علامت سوال به جای حروف فارسی در SQL Server عموماً به دلیل تنظیمات نادرست در نوع داده یا کدگذاری کاراکترها است. برای اطمینان از اینکه حروف فارسی به درستی ذخیره و بازیابی می شوند، می توانید از نوع داده `nvarchar` به جای `varchar` استفاده کنید. نوع داده `nvarchar` برای ذخیره سازی کاراکترهای یونیکد مناسب است و به شما این امکان را می دهد تا حروف غیرانگلیسی مانند فارسی را به درستی نمایش دهید.

در کد شما باید تغییرات زیر را اعمال کنید:

ALTER Procedure Sp_UserLeaveReprt
	@FromDate datetime,
	@ToDate Datetime,
	@userid nvarchar(max),  -- تغییر به nvarchar
	@LeaveType int
As
Begin
	if (@LeaveType = -1)
	Begin
		select 
		LeaveType,
		(Case When LeaveType = 1 Then N'ساعتی' When LeaveType = 2 Then N'استحقاقی' When LeaveType = 3 Then N'استعلاجی' When LeaveType = 4 Then N'بدون حقوق' Else '' End) As LeaveTypeDesc
		 from Leave_Tbl
			where UserID_Request = @userid
			And ((FromDate_Day >= @FromDate And ToDate_Day <= @ToDate)
				Or
			(FromTime_Saati >= @FromDate And FromTime_Saati <= @ToDate))
	End
	else
	Begin
		select 
		LeaveType,
		(Case When LeaveType = 1 Then N'ساعتی' When LeaveType = 2 Then N'استحقاقی' When LeaveType = 3 Then N'استعلاجی' When LeaveType = 4 Then N'بدون حقوق' Else '' End) As LeaveTypeDesc
		 from Leave_Tbl
			where UserID_Request = @userid
			And LeaveType = @LeaveType
			And ((FromDate_Day >= @FromDate And ToDate_Day <= @ToDate)
				Or
			(FromTime_Saati >= @FromDate And FromTime_Saati <= @ToDate))
	End
End

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

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 16:20 1401/02/23

اگر در دیتابیس DataType رو به صورت nvarchar تعریف کردید نباید مشکلی باشه. احتمالا توی کوئری که دارید یک تبدیل نوع داره انجام میشه. بهتره قبل از حروف فارسی از N استفاده کنید تا به نوع nvarchar تبدیل بشه. کوئری شما به شکل زیر تبدیل میشه :

ALTER Procedure Sp_UserLeaveReprt
	@FromDate datetime,
	@ToDate Datetime,
	@userid varchar(max),
	@LeaveType int
As
Begin
	if (@LeaveType = -1)
	Begin
		select 
		LeaveType,
		(Case When LeaveType = 1 Then N'ساعتی' When LeaveType = 2 Then N'استحقاقی' When LeaveType = 3 Then N'استعلاجی' When LeaveType = 4 Then N'بدون حقوق' Else '' End) As LeaveTypeDesc
		 from Leave_Tbl
			where UserID_Request =	@userid
			And ((FromDate_Day >=	@FromDate And ToDate_Day <= @ToDate)
				Or
			(FromTime_Saati >=	@FromDate And FromTime_Saati <=@ToDate))
	End
	else
	Begin
		select 
		LeaveType,
		(Case When LeaveType = 1 Then N'ساعتی' When LeaveType = 2 Then N'استحقاقی' When LeaveType = 3 Then N'استعلاجی' When LeaveType = 4 Then N'بدون حقوق' Else '' End) As LeaveTypeDesc
		 from Leave_Tbl
			where UserID_Request =	@userid
			And LeaveType = @LeaveType
			And ((FromDate_Day >=	@FromDate And ToDate_Day <= @ToDate)
				Or
			(FromTime_Saati >=	@FromDate And FromTime_Saati <=@ToDate))
	End
End

وقتی از N قبل از حروف فارسی یا عربی استفاده می کنید اگر DataType از نوع varchar یا char باشه تبدیل به nvarchar یا nchar میشه.

به این پاسخ امتیاز بدهید    1
امتیاز: 1635 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود