ورود

View Full Version : مشکل با collation



joker
سه شنبه 22 تیر 1395, 10:29 صبح
یک پایگاه داده mssql 2014 دارم
کولیشن پیش فرض موقع نصب Persian_100_CI_AI هست

مشکلی که دارم اینه که در جدوالم هر چیزی ثبت میکنم حروف "ی" فارسی میفرستم ولی به صورتی "ي" عربی ذخیره میشه !!!
کسی میتونه بگه علتش چیه و چیکارش کنم درست بشه ؟
کولیشن دیتابیس را هم به فارسی یا عربی تغییر دادم ولی فرقی نمیکنه در صورتی که از دستورات insert یا update استفاده کنم در هر حال با "ي" عربی ذخیره میکنه
فقط زمانی که در خود محیط sql دستی ادیت کنم فارسی صحیح ذخیره میشه.

اشکال دیگه هم موقع سورت کردن هست که کاراکترهای ک و چ را به ترتیب حروف الفبای فارسی نمیاره و میندازه در انتهای لیست ( چه کولیشنی پیشنهاد میکنید ست کنم؟ یا راه حل اساسی تری پیشنهاد میکنید ؟

فایل ضمیمه را هم ببینید

pezhvakco
سه شنبه 22 تیر 1395, 11:05 صبح
تا جایی که میدونم Collation هیچ کاری به روش ذخیره و ساختار کاراکتر ها (نوع زبان) ندارد و فقط برای مرتب سازی کاربردهای داره.

من هم این مشکا رو داشتم و مشکل از فونت کاراکتری بود که برای ذخیره از طرف برنامه فرستاده میشد =>
*** ابتدا فونت های برنامه رو بررسی و بهتر بهکار بردن فونت های فارسی مانند B دار ها است ***
در پایگاه داده
1) ساختار ستون NVarchar باشد
2) اگه با SP ذخیره میکنیم ساختار پارامتر ورودی NVarchar باشد
=>
اگه بازهم مشکل داشت با یه تابع کاراکتر های ورودی به پارامتر SP رو بررسی و ویرایش کنیم

FUNCTION [dbo].[SS_FuncArabic2Farsi]
(
@StrInp nvarchar(max)

)
RETURNS nvarchar(max)
AS
BEGIN

Set @StrInp = replace(@StrInp, nchar(1610), nchar(1740));
Set @StrInp = replace(@StrInp, nchar(1603), nchar(1705));

RETURN @StrInp;


END

joker
سه شنبه 22 تیر 1395, 11:14 صبح
از فونت استفاده نمیکنم -
دستور مستقیم sql میزنم و استورپروسیجر استفاده نمیکنم
فیلدها از نوع nvarchar هست

یک مثال ساده


UPDATE [Table_1] SET
name ='علی'


ولی در دیتابیس علي ذخیره میشه !!!

با گزاشتن N قبلش توی دیتابیس درست ذخیره میشه ، ولی به علت ساختار برنامه نمیتونم این N را بنویسیم ، ی جورایی پوستم کنده میشه برای کل سیستم بخوام اضافه کنم اینو :)

pe32_64
سه شنبه 22 تیر 1395, 11:29 صبح
یک پایگاه داده mssql 2014 دارم
کولیشن پیش فرض موقع نصب Persian_100_CI_AI هست

مشکلی که دارم اینه که در جدوالم هر چیزی ثبت میکنم حروف "ی" فارسی میفرستم ولی به صورتی "ي" عربی ذخیره میشه !!!
کسی میتونه بگه علتش چیه و چیکارش کنم درست بشه ؟
کولیشن دیتابیس را هم به فارسی یا عربی تغییر دادم ولی فرقی نمیکنه در صورتی که از دستورات insert یا update استفاده کنم در هر حال با "ي" عربی ذخیره میکنه
فقط زمانی که در خود محیط sql دستی ادیت کنم فارسی صحیح ذخیره میشه.

اشکال دیگه هم موقع سورت کردن هست که کاراکترهای ک و چ را به ترتیب حروف الفبای فارسی نمیاره و میندازه در انتهای لیست ( چه کولیشنی پیشنهاد میکنید ست کنم؟ یا راه حل اساسی تری پیشنهاد میکنید ؟

فایل ضمیمه را هم ببینید
این جا رو ببین
شاید مشکلت حل شد :
http://www.developercenter.ir/forum/showthread.php?28690-Collation-%D9%88-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%DA%86%D8%A7%D9%84%D8%B4%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%85%D8%B1%D8%A8%D9%88%D8%B7-%D8%A8%D9%87-%D8%A2%D9%86-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C

pezhvakco
سه شنبه 22 تیر 1395, 12:09 عصر
از فونت استفاده نمیکنم -
دستور مستقیم sql میزنم و استورپروسیجر استفاده نمیکنم
فیلدها از نوع nvarchar هست

یک مثال ساده


UPDATE [Table_1] SET
name ='علی'


ولی در دیتابیس علي ذخیره میشه !!!

شاید درست نفهمیده باشم =>
شما در خود پنجره های کوئری برنامه SSMS کد نویسی میکنی و داده ها رو اضافه یا ویرایش میکنی ؟



با گزاشتن N قبلش توی دیتابیس درست ذخیره میشه ، ولی به علت ساختار برنامه نمیتونم این N را بنویسیم ، ی جورایی پوستم کنده میشه برای کل سیستم بخوام اضافه کنم اینو :)
میشه بیشتر توضیح بنویسید که روش کار شما چه است .

داده ها رو با چه روشی از برنامه (وب یا ویندوز) در پایگاه داده ذخیره میکنی
1) SP
2) Command Exec
3) ...