View Full Version : تغییر char به nvarchar
بهمن بهار
دوشنبه 10 بهمن 1384, 00:25 صبح
با عرض ادب و احترام به تمامی دوستان خوب
من مشکلی دارم که اگر امکان دارد راهنمایی کنید.
یک بانک sql با حدود 45 جدول دارم که با زبان دلفی طراحی کرده ام و حدود 5 ماه است که کاربران درحال استفاده از برنامه هستند. و حالا متوجه شده ام برای فیلدهای فارسی بهتر بود به جای Char از nvarchar استفاده میکردم.
حالا سئوال این است که اگر الان بخواهم فیلدها را به nvarchar تغییر بدهم مشکلی برای بانک بوجود نمی آید؟ (بانک عربی تعریف شده)
و دیگر اینکه در Query ها چه تغییری باید بدهم. تا مشکلی پیش نیاید.
و سوال آخر اینکه اصلا برای فیلدهای فارسی بهتر است از کدامیک استفاده کنم Char یا nchar یا nvarchar ؟
باتشکر قبلی
بهمن بهار
Maryam Hashemi
دوشنبه 10 بهمن 1384, 11:34 صبح
مشکل خاصی ایجاد نمی شود nvarchar بهتر است
Elham_gh
دوشنبه 10 بهمن 1384, 20:10 عصر
دوست عزیز جناب آفای بهمن بهار,
در مورد سوالتون چند مورد را باید متذکر شوم:
1-"یک بانک sql با حدود 45 جدول دارم که با زبان دلفی طراحی کرده ام " .نه! شما سیستمی پیاده سازی کرده اید که واسط کاربری آن دلفی و پایگاه داده آن تحت SQL Server (به احتمال زیاد) است. که پایگاه داده شما 45 جدول دارد.
2- فرق Char, VarChar,TEXT با NChar ,NVarChar و NTEXT در CodePage انهاست.خانواده Char, VarChar,TEXT از CodePageی استفاده مس کنند که شما ست کرده اید. اما خانواده NChar ,NVarChar و NTEXT از UniCode استفاده می کند. لذا به ازای هر کاراکتر 2 بایت در این نوع فیلدها ذخیره می شود. یعنی یک دیتای ثابت در Char, VarChar,TEXT با حجمی برابر نصف حجم ذخیره سازی در NChar ,NVarChar و NTEXT , ذخیره می شوند. لذا , هنگام تبدیل مثلا فیلذی از نوع CHAR(10) باید آن را به NCHAR(20) تبدیل کنید.
اما گمان نکنم این تبدیل برای شما ضرورتی داشته باشند. معمولا کسانی از نوع فیلدهای NX استفاده می کنند که می حواهند اطلاعاتشان را روی صفحات وب بگذارند که هر کس از هرجا , با هر سیستم عاملی صفحات را دید مشکلی نداشته باشد. شما نیازی به این تبدیل ندارید.
موفق و موید باشید
بهمن بهار
سه شنبه 11 بهمن 1384, 00:19 صبح
با عرض ادب و احترام به دوستان خوب
با تشکر از راهنمایی شما لطفا در مورد تفاوت حجم که ذکر کردید کمی بیشتر توضیح دهید.
فرق Char, VarChar,TEXT با NChar ,NVarChar و NTEXT در CodePage انهاست.خانواده Char, VarChar,TEXT از CodePageی استفاده مس کنند که شما ست کرده اید. اما خانواده NChar ,NVarChar و NTEXT از UniCode استفاده می کند. لذا به ازای هر کاراکتر 2 بایت در این نوع فیلدها ذخیره می شود. یعنی یک دیتای ثابت در Char, VarChar,TEXT با حجمی برابر نصف حجم ذخیره سازی در NChar ,NVarChar و NTEXT , ذخیره می شوند. لذا , هنگام تبدیل مثلا فیلذی از نوع CHAR(10) باید آن را به NCHAR(20) تبدیل کنید.
یعنی اگر من بخواهم حجم بانک به حداقل برسد از همان Char, VarChar,TEXT استفاده کنم بهتر است ؟
باتشکر بهمن بهار
Elham_gh
سه شنبه 11 بهمن 1384, 10:54 صبح
با یک مثال توضیح می دم. فرض کنید فیلدی دارید که نوع آن VARCHAR(10) است.مقداری مثل 'COFFEE' به راحتی در این فیلد می تواند ذخیره شود و حجمی که اشغال می کند معادل 6 بایت است. حال اگر همین دیتا را در فیلد NVARCHAR ذخیره کنید حجمی معادل 12 بایت اشغال می کند. به همین دلیل ماکزیمم طول Char و VARCHAR برابر 8000 کاراکتر است , اما NChar و NVARCHAR ماکزیمم 4000 کاراکتر گنجایش دارند.
بهمن بهار
چهارشنبه 12 بهمن 1384, 22:33 عصر
با عرض ادب و احترام به تمامی دوستان خوب
از راهنمایی شما متشکرم ولی برای من کمی دیر جا می افتد. باید ببخشید.
با این حساب بهتر است که به خاطر کمتر شدن حجم بانک من تغییری در فرمت فیلدها ندهم و همان Char برای فیلدهای فارسی مناسب است یا باید آنها را به Varchar تبدیل کنم؟
Elham_gh
چهارشنبه 12 بهمن 1384, 23:10 عصر
سلام
از ظاهر امر پیداست شما احتیاجی ندارید نوع فیلدهای رشته ای جداولتان را از وضعیت فعلی به نوعهایی که Uncode ساپورت می کنند تغییر بدین.
اما در مورد انتخاب Char ,Varchar و Text:
اگر داده شما طولش بیش از 8000 کاراکتر است , نوع فیلدتان باید Text باشد. و اگر کمتر بود از Char و Varchar. اما چه موقع , کدام؟! همانطور که می دانید فیلدهای Varchar حجم کمتری اشغال می کنند , اما تو پردازشها ار Char کندتر عمل کرده و سرعت پردازش را پایین می آورند. پس باید در انتخاب مناسب و بجای هر کدام دفت کرد.
اگه Tolerance طول اطلاعاتی که می خواهید در فیلدتان ذخیره کنید کم است , از CHAR استفاده کنید در عیر این صورت VARCHAR مناسبتر است. برای مثال اگر فیلدی دارید به نام FullName که در آن نام و نام خانوادگی افراد را نگهداری می کنید , این data ها ممکن است از 7کاراکتر باشد( علی راد) تا 50 کاراکتر. اینجا بهتر است نوع فیلد را VARCHAR(50) بگیرید. مثلا برای ایالتهای آمریکا CHAR(2) مناسب است .
بهمن بهار
چهارشنبه 12 بهمن 1384, 23:23 عصر
:تشویق:
با عرض ادب و احترام
از راهنمایی کامل و واضح شما متشکرم حالا کاملا متوجه تفاوتها شدم.
با تشکر مجدد
بهمن یهار
aki
شنبه 15 مهر 1385, 08:24 صبح
مشکل کجاست؟
sql من فارسی رو توی فیلد varchar به صورت ؟؟؟؟؟ ؟؟؟ ذخیره میکند
sql رو چطوری نصب کنم؟
SabaSabouhi
دوشنبه 24 مهر 1385, 14:56 عصر
لذا , هنگام تبدیل مثلا فیلذی از نوع CHAR(10) باید آن را به NCHAR(20) تبدیل کنید.
با سلام
دوست عزیز، بجاى (Char(10 باید از (NChar(10 استفاده شود. خود SQL دوبرابر فضا مىگیرد و نیازى نیست که بجاى 10 از 20 استفاده کنید.
صبا صبوحى
h_baqery
سه شنبه 25 مهر 1385, 09:29 صبح
مشکل کجاست؟
sql من فارسی رو توی فیلد varchar به صورت ؟؟؟؟؟ ؟؟؟ ذخیره میکند
sql رو چطوری نصب کنم؟
جستجو کنید چندین بار توضیح داده شده .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.