char – כשאתה מגדיר אותו, תופס בדיוק את המקום שהגדרת לו. אם תגדיר אותו Char(15) הוא יתפוס בדיוק 15 בייט. אתה מה שאתה לא מכניס – הוא משלים ברווחים, לכן len ייתן לך 15 גם אם הכנסת רק 3 אותיות, כלומר – יש לו גודל קבוע. בסוג השדה הזה תשתמש כשהמחרוזות של הן תמיד באורך יחסית זהה.
varchar – יתפוס מקום כמספר התווים שהוכנסו לו, ולכן len ייתן לך אורך אמיתי של התוכן, כלומר – הגודל שלו משתנה, וזה גם מתבטא ביעילות השימוש בשדה. בסוג השדה הזה תשתמש כשאורך המחרוזות שלך יכול להשתנות משמעותית בין רשומה לרשומה.
text– לא זוכרת בדיוק כמה הוא יכול להכיל, אבל הוא תופס המון מקום, והוא מאוד לא יעיל. אם הטקסט של הוא עד 8000 תווים – רצוי להשתמש ב-varchar. יש כאלו שטוענים גם שיעיל יותר לחלק טקסט גדול לשני שדות varchar מאשר להשתמש בשדה.
ntext, nchar ו-nvarchar הם אותו דבר, רק יוניקוד, כך שהם יכולים להכיל חצי מכמות התווים של האחים הגדולים שלהם.
התשובה הקודמת די לא מדוייקת. char באמת תופס את המקום שהוגדר בדיוק, כפי שצוין בתשובה מעלי. כלומר, אם אגדיר char(15) אכן תמיד יתפסו 15 bytes. varchar תופס את המקום הדרוש + null byte, כלומר אם הגדרתי varchar(15) אוכל להכניס עד 15 bytes של מידע, אבל תמיד יתפס byte נוסף (עבור 'abc' יתפסו 4 bytes). text פועל בדיוק כמו varchar מהבחינה הזו, הוא לא תופס יותר מקום, ולא נכון לומר שהוא פחות יעיל.
ההבדל בין varchar ו-text הוא ש-varchar נשמר בתוך הרשומה עצמה בטבלה, בעוד שב-text נשמר pointer למקום חיצוני שבו נשמר ה-text. קשה לומר מי עדיף מתי, בגדול עבור מחרוזות קצרות varchar כנראה ייתן ביצועים טובים יותר, אבל עדיף לעשות benchmarks לאפליקצייה בפועל.
2 תשובות
char – כשאתה מגדיר אותו, תופס בדיוק את המקום שהגדרת לו. אם תגדיר אותו Char(15) הוא יתפוס בדיוק 15 בייט. אתה מה שאתה לא מכניס – הוא משלים ברווחים, לכן len ייתן לך 15 גם אם הכנסת רק 3 אותיות, כלומר – יש לו גודל קבוע.
בסוג השדה הזה תשתמש כשהמחרוזות של הן תמיד באורך יחסית זהה.
varchar – יתפוס מקום כמספר התווים שהוכנסו לו, ולכן len ייתן לך אורך אמיתי של התוכן, כלומר – הגודל שלו משתנה, וזה גם מתבטא ביעילות השימוש בשדה. בסוג השדה הזה תשתמש כשאורך המחרוזות שלך יכול להשתנות משמעותית בין רשומה לרשומה.
text– לא זוכרת בדיוק כמה הוא יכול להכיל, אבל הוא תופס המון מקום, והוא מאוד לא יעיל. אם הטקסט של הוא עד 8000 תווים – רצוי להשתמש ב-varchar. יש כאלו שטוענים גם שיעיל יותר לחלק טקסט גדול לשני שדות varchar מאשר להשתמש בשדה.
ntext, nchar ו-nvarchar הם אותו דבר, רק יוניקוד, כך שהם יכולים להכיל חצי מכמות התווים של האחים הגדולים שלהם.
התשובה הקודמת די לא מדוייקת.
char באמת תופס את המקום שהוגדר בדיוק, כפי שצוין בתשובה מעלי. כלומר, אם אגדיר char(15) אכן תמיד יתפסו 15 bytes.
varchar תופס את המקום הדרוש + null byte, כלומר אם הגדרתי varchar(15) אוכל להכניס עד 15 bytes של מידע, אבל תמיד יתפס byte נוסף (עבור 'abc' יתפסו 4 bytes).
text פועל בדיוק כמו varchar מהבחינה הזו, הוא לא תופס יותר מקום, ולא נכון לומר שהוא פחות יעיל.
ההבדל בין varchar ו-text הוא ש-varchar נשמר בתוך הרשומה עצמה בטבלה, בעוד שב-text נשמר pointer למקום חיצוני שבו נשמר ה-text.
קשה לומר מי עדיף מתי, בגדול עבור מחרוזות קצרות varchar כנראה ייתן ביצועים טובים יותר, אבל עדיף לעשות benchmarks לאפליקצייה בפועל.