DCSIMG
קצת על SQL Types - שחר.נט

שחר.נט

בלוגים שאני קורא

ספרים מומלצים

קצת על SQL Types

בעקבות שאלה שנשאלה בפורום תכנות .net, חשבתי להביא סקירה קצרה על ה types של SQL שכולנו משתמשים בהם יום יום, מה ההבדלים שלהם ומהי צורת ההתנהגות שלהם.
char ו-varchar, אלה שני ה types הבסיסיים. char, יכיל תמיד את האורך שלו, משמע, שאם אני אשתמש ב char ואגדיר לו לקבל 10 תווים, ואכניס shahar, מה שיאוכסן בפועל זה shahar ובנוסף לכך 4 תווים ריקים. כשמשתמשים ב type הזה, נהוג להשתמש במתודה String.Trim לפני העבודה עם הערכים, כדי לקבל את הערך שהוכנס נטו, ולסלק רווחים מיותרים מהצד.

varchar, למעשה, מכיל את הערך נטו שהוכנס. כלומר, אם הגדרתי varchar באורך 10 תווים, ואני אכתוב shahar, מה שיאוכסן בפועל זה רק shahar, בלי תוספות.
מבחינת שימוש, אני אשתמש ב char בשביל לאכסן מחרוזת כלשהי שאני יודע שהיא חייבת להיות באורך שאני קובע. מספר תעודת זהות, תמיד יהיה 9 ספרות - אין סיכון שמישהו יכניס פחות (אלא אם כן הוא מרמה, ועל זה הוואלידציה אמורה לעלות), לכן רצוי שאני אשתמש ב char. כשאני עושה שדה שם, רצוי שהוא יהיה varchar, כי אמנם שם מצוי לא יעבור את ה 80 תווים, אבל הוא יכול להיות כל מקום בין 2 ל 80, ואני מעדיף לשלם את העלות הקטנה של שימוש ב varchar (תוספת של 2 bytes לערך), אבל שיהיה לי בדיוק את הכמות תווים שאני רוצה, ולא שיהיה לי אורך כפול בגלל רווחים שהתווספו.

type אפשרי נוסף, הוא text - כשאנחנו מדברים על text, אנו מדברים על משהו קצת יותר מורכב מבחינת אכסון, בשל הגודל העצום שלו, הערכים של text ושל ntext לא ממש מאוכסנים בDB עצמו, ברשומה עצמה, אלא יש הפנייה לערך עצמו שמאוכסן בנפרד. בשל כך, ובשל הגודל שלו, העבודה עם text קצת יותר מוגבלת, והוא לא תומך בכל מיני פונקציות ומשפטי SQL, למשל Group.

התוספת של ה 'n' בהתחלה, המשמעות שלה היא תמיכה ביוניקוד - משמע שה type המסויים הזה יהיה קצת יותר גדול כשיוסיפו לו את ה n, אבל יתמוך בתווי יוניקוד.

בהצלחה.

פורסם: Jan 04 2008, 09:47 AM by שחר גבירץ | with 2 comment(s)
תגים:
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 5 and 1 and type the answer here:


Enter the numbers above: