ورود

View Full Version : سوال: بزرگترين نوع داده اي



sav68.net
پنج شنبه 02 مهر 1388, 14:05 عصر
سلام دوستان

من در حال طراحي يك سايت ميباشم
ميخوام براي بخش مقالات سايت يك جدول درست كنم وقتي كه نوع فيلد مقاله رو nvarchar(4000 ) گذاشتم ميبينم كه خيلي كوچك است و مقاله هاي معمولي هم توش جا نميشه

به نظرتون چه نوع فيلدي بايد بزارم تا مقاله هاي خيلي بزرگ هم جا بشه؟


با تشكر

meysam_pro
پنج شنبه 02 مهر 1388, 15:13 عصر
nvarchar(MAX)

sav68.net
پنج شنبه 02 مهر 1388, 16:49 عصر
سلام
ممنون كه جواب دادين

ولي nvarchar نهايتا 4000 كاراكتر ميگيره
اگه اشتباه ميكنم بگو

با تشكر

mojtaba.baghban
پنج شنبه 02 مهر 1388, 18:38 عصر
توی nvarchar(max) میشه 2 به توان 31 بایت یعنی حدود یک گیگا بایت ذخیره کرد

sav68.net
پنج شنبه 02 مهر 1388, 19:59 عصر
نظرتون راجع به ntext چيه؟

آخه چند دقيقه پيش مجبور شدم نوع فيلدها رو عوض كنم به ntext اگر مشكلي داره بگين درستش كنم

با تشكر

meysam_pro
پنج شنبه 02 مهر 1388, 20:11 عصر
Text یا ntext هیچ مزیتی نسبت به نوع گفته شده نداره که هیچ از لحاظ Performance هم خوب نیست(یه اشاره گر به خارج از ساختار میزنه و....). در ضمن صرفا برای سازگاری با ورژن های قبلی تو 2008 اومده وگرنه قراره حذف بشه.

niloofar norouzi
پنج شنبه 13 خرداد 1389, 00:33 صبح
سلام
وقتي از فيلد از نوع nvarchar(max) كوئري مي گيريم كمتر از 8000 تا را نشان ميده
براي بيش از 8000 بايد چي كار كرد؟

محمد سلیم آبادی
پنج شنبه 13 خرداد 1389, 13:20 عصر
سلام
وقتي از فيلد از نوع nvarchar(max) كوئري مي گيريم كمتر از 8000 تا را نشان ميده
براي بيش از 8000 بايد چي كار كرد؟

مشکل از Option نرم افزار هست نه data type.
باید ظرفیت کاراکترهایی که برمی گردند را افزایش بدین.
Tools Menu --> Options --> Query Results

http://www.barnamenevis.org/forum/attachment.php?attachmentid=50342&stc=1&d=1275556806

محمد سلیم آبادی
جمعه 14 خرداد 1389, 20:37 عصر
اینبار این مسیر رو برین
Query Menu --> Query Options -->Resutls

در ضمن من که از 2008 دارم استفاده می کنم عدد پیشفرض 65535 هست.
جالبه وقتی از منوی tools تغیر میدیم و میریم از منوی query ببینیم این عدد را دو عدد مستقل از هم هستن.

iman_ad
جمعه 14 خرداد 1389, 21:08 عصر
دوست عزیزم اصلا ربطی به این نداره مهم نیست کجا ست کنی حتی می تونی بالای کوئریت ست کنی و باری هر کویری متفاوت باشه
شما خودت با دستور
replicate('*',16000)+replicate('-',16000)
32000 تا کاراکتر تو یک فیلد از ntext و nvarchar(max) اینزرت کن بعد تو sql و یک بار دیگه تو برنامه بخون اگه تونستی - ببینی

محمد سلیم آبادی
جمعه 14 خرداد 1389, 21:41 عصر
دوست عزیز،
هنگام ست کردن باید کاراکتر ها را به varchar max کانورت کرد (چون وقتی به مقداری به طور صریح تبدیل نشن همون varchar معمولی هستند...)، یعنی :

declare @i varchar(max);
set @i=replicate(cast('*' as varchar(max)) ,16000)
+replicate(cast('_' as varchar(max)) ,16000);

select @i, LEN(@i)

محمد سلیم آبادی
جمعه 14 خرداد 1389, 21:57 عصر
به این کد و نتیجه اش کامل دقت کنید:

declare @i varchar(max),
@j varchar(max);

select @i=replicate(cast('*' as varchar(max)) ,16000)
+replicate(cast('_' as varchar(max)) ,16000),
@j=replicate('^', 8000 * 10);

select LEN(@i) AS [With Casting!],
LEN(@j) AS [Without Casting!];

/*----------------------------------------
With Casting! Without Casting!
-------------------- --------------------
32000 8000
*/---------------------------------------