Varchar ב-MySQL הוא סוג נתונים המשמש לאחסון טקסט שאורכו יכול להיות לכל היותר 65535 תווים . עמודות ה-varchar בטבלה הן של מחרוזת באורך משתנה שיכול להכיל מספרים או תו או שניהם. סוג נתונים זה מסוגל לאחסן רק 255 תווים לפני גרסה 5.0.3, אך עם גרסה זו ומעלה, הוא יכול להכיל עד 65535 תווים. ניתן לאחסן אותו ב-MySQL בתור א 1-byte או 2-byte קידומת אורך בתוספת גודל אמיתי.
קידומת האורך מציינת את אורך הבתים של ערך מחרוזת, לא את הגודל המקסימלי שקבענו. אם ערכים אינם דורשים יותר מ-255 בתים, עמודה משתמשת בקידומת אורך בתוספת בית אחד. אם ערכים דורשים יותר מ-255 בתים, עמודה משתמשת בקידומת אורך ועוד שני בתים.
האורך המרבי של VARCHAR in MySQL כפוף לגודל השורה המרבי של 65,535 בתים, המשותף בין כל העמודות למעט עמודות TEXT/BLOB וערכת התווים בשימוש. זה אומר שהעמודה הכוללת לא צריכה להיות יותר מ-65535 בתים.
הבה נבין זאת בעזרת דוגמה.
ציור מלבן gimp
אנחנו הולכים ליצור שתי טבלאות ונקרא להן Test1 ו-Test2. שתי הטבלאות מכילות שתי עמודות בשם T1 ו-T2. בצע את ההצהרה הבאה כדי ליצור טבלה ' מבחן 1 ':
שלוקה מהטה
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
ההצהרה לעיל יצרה טבלה בהצלחה מכיוון שאורך העמודה T1 = 32765 פלוס 2 בתים ו-T2 = 32766 פלוס 2 בתים שווה ל-65535 (32765+2+32766+2). אז, אורך העמודה עומד בגודל השורה המקסימלי של varchar, שהוא 65535.
עכשיו, אנחנו הולכים לראות מה קורה אם גודל העמודה עולה על הגודל המרבי של varchar 65535. בצע את ההצהרה שלהלן שבה יש לנו מגדיל את גודל העמודה T1 כדי ליצור טבלה מבחן 2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
לאחר ביצוע ההצהרה לעיל, MySQL מייצר את השגיאה. זה אומר שגודל השורה המרבי לא יכול לעלות על 65,535 בתים. בכל מקרה, אם הוא גדל, ההצהרה נכשלה, ו-MySQL תיצור שגיאה.
במקרה אחר, נניח שיצרנו טבלה בשם מבחן 3 באמצעות ההצהרה שלהלן:
הערות שוליים
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
לאחר מכן, הכנס ערכים לטבלה באמצעות המשפט הבא:
INSERT INTO Test3(Name) VALUES ('Stephen');
כעת, בצע את ההצהרה לעיל. MySQL נותן את הודעת השגיאה: הנתונים ארוכים מדי עבור העמודה 'שם' בשורה 1 . הפלט מסביר זאת בצורה ברורה יותר.
MySQL VARCHAR ו-Spaces
MySQL אינו מרופד מקום עבור ערכי varchar כאשר הם מאוחסנים. MySQL גם שמר על הרווחים הנגררים כאשר הם אחסנו או שלפו ערכי varchar. אנו יכולים להבין זאת באמצעות הדוגמה הבאה שבה an הכנס הצהרה מוסיף ערכים ב- שֵׁם עמודת הטבלה מבחן 3 :
INSERT INTO Test3(Name) VALUES ('John ');
לאחר מכן, בצע את המשפט SELECT כדי לאחזר את הערכים.
SELECT Id, Name, length(Name) FROM Test3;
זה ייתן את הפלט הבא שבו MySQL כלל את החלל הנגרר בספירת האורך מכיוון שהוא לא מגדיל את אורך העמודה.
עם זאת, כאשר אנו מנסים להכניס ערך varchar עם רווחים נגררים שחרגו מאורך העמודה, ה-MySQL לקטוע המרחבים הנגררים. כמו כן, MySQL נושא א אַזהָרָה . הדוגמה הבאה מסבירה זאת בצורה ברורה יותר:
בנאי ב-java
INSERT INTO Test3(Name) VALUES ('Peter ');
ההצהרה לעיל מכניסה ערך שאורכו הוא שֵׁשׁ לתוך עמודת השם. הערך עדיין הוכנס לעמודה, אך MySQL חותכת את הרווח הנגרר לפני הוספת הערך. אנו יכולים לאמת באמצעות השאילתה שלהלן שבה נוכל לראות את הצהרת ה-insert שנוספה בהצלחה, אך עם אזהרה שנותנת: נתונים קטועים עבור העמודה 'שם' בשורה 1 :
ההבדל בין Char ו- Varchar Type Data
סוגי הנתונים char ו-varchar הם שניהם הבאים תו ASCII . הם כמעט זהים אך שונים באחסון ואחזור הנתונים ממסד הנתונים. הטבלה הבאה מסכמת את ההבדלים המהותיים בין סוג הנתונים של char ו- varchar:
לְהַשְׁחִיר | VARCHAR |
---|---|
זה עומד באופי. | זה מייצג אופי משתנה. |
הוא מאחסן את הערכים באורך קבוע שאנו מצהירים בעת יצירת טבלה. | הוא מאחסן את הערכים במחרוזת באורך משתנה עם קידומת באורך אחד או שניים. |
ניתן לרפד סוג נתונים זה ברווח נגרר כדי לשמור על האורך שצוין. | לא ניתן לרפד סוג נתונים זה באף תו, כולל רווח, כאשר הם מאוחסנים. |
זה לא יכול להכיל יותר מ-255 תווים. | זה יכול להכיל עד 65535 תווים. |
הוא תומך בהקצאת זיכרון סטטי. | הוא תומך בהקצאת זיכרון דינמית. |