nvarchar מול ntext

nvarchar מול ntext

שלום, האם מישהו יכול להסביר את ההבדלים בין שני סוגי השדות האלו? מי מהם יותר בזבזבני? ועד כמה זה משמעותי, אם בכלל? יש לי שדות שבהם אמור להיות טקסט ארוך, קרוב ל-4000 תווים (שזה, אם הבנתי נכון, המקסימום של nvc). אז האם להגדיר אותם כ-nvarchar, ולהסתכן בכך שיום אחד תהיה רשומה שתעבור את ה-4000 (לא סביר, אבל אולי), או להגדיר את כולם כ-ntext?
 

eli_leiba

New member
הבדל בין nvarchar ל ntext

שלום לאוסטרלית... ולשאלתך nvarchar זוהי הקצאה דינמית של מקום ויכול להכיל מקס עד 4000 בתים אם למשל מגדירים שדה nvarchar 100 ובפועל הוא תופס 60 מקומות אזי ברשומה הפיזית בדיסק יהיו משוייכים לשדה זה 62 בתים 60 לערך בפועל ו עוד 2 לפוינטר היכן שהוא נגמר רשומה ב sql server מסודרת כך: ROW HDR + FIXED BLOCK + NULL BLOCK + VARIABLE BLOCK ROW HDR זה 4 בתים שבהם ה ri של הרשומה fixed block - כל השדות שהם בגודל קבוע null block - מערך של ביטים שמציין איזה שדה ריק ואיז לא variable block כל השדות באורך לא קבוע + פונטר לסוף כל שדה פוניטר + שדה לסרוגין שדה ntext זה סיפור שונה לגמרי - כאשר מגדירים שדה כ ntext אזי ברשומה של הטבלה עצמה נכנס שדה בגודל 4 בתים בלבד שהוא הכתובת להיכן שנמצא המידע עצמו - בד"כ משתמשים בו למידע מעבר ל 4000 בתים אם המידע קצר - עד 2000 תווים לערך - כדאי להשתמש ב nvarchar כי הנתונים נמצאים יחד עם כל הרשומה, רק במקרה שאין ברירה נשתמש ב ntext כי השליפה מנו קשה יותר ומערבת מעבר לשטחים אחרים בדיסק
 

אילן די

New member
אל תשתמשי ב TEXT אם אין ממש צורך

אם את לא צריכה שדות מעל 8000 תווים - אל תשתמשי בשדה TEXT. זה יוצר בעיה באספקטים מסויימים (אין אפשרות לאנדקס, אי אפשר ליצא ב BCP), בעיות באפגריידים והסבות. ממש כאב ראש.
 
למעלה