הבלוג של גרי רשף

03/03/2011

התנהגות המערכת בהגדרת ה-Collation

Filed under: Uncategorized — תגיות: , , , — גרי רשף @ 19:48

ה-Collation מגדיר את השפות והמאפיינים בהן המערכת תומכת.
בארץ למשל מקובל להשתמש ב-Hebrew_CI_AS שמאפשר כתיבה בעברית ובאנגלית, אי רגישות של המערכת להבדלים בין אותיות רגילות לסופיות (בעברית) ובין קטנות לגדולות (בלועזית), ורגישות לאותיות מנוקדות (בעברית).
אי רגישות בין אותיות רגילות לסופיות פירושה שמבחינת המערכת מ=ם או פ=ף לצורך השוואה, אך כמובן שהאותיות נשמרות כאותיות שונות.

בעת התקנת SQL Server נקבע ה-Collation של השרת שהוא יהיה ה-Collation של הדטבייסים של המערכת, וכן Collation ברירת המחדל של הדטבייסים שיווצרו בהמשך (אם לא יוגדר להם במפורש אחד אחר):

clip_image002

(בצילום המסך שתי דרכים למצוא מה ה-Collation של השרת)

שינוי ה-Collation של השרת הוא פעולה די רגישה שבונה מחדש את הדטבייסים של המערכת וכוללת Restart של השרת, כך שעדיף לא לנסות על שרת הייצור..

כשיוצרים דטבייס חדש – ה-Collation שלו יהיה זה של השרת אלא אם כן נאמר אחרת, למשל כך:

Create Database MyDB Collate Hebrew_CI_AI;

Go

וניתן למצוא את ה-Collation של הדטבייס באחת מהדרכים הבאות:

Select DatabasePropertyEx('master','Collation');

Select DatabasePropertyEx(DB_Name(),'Collation');

Select name,collation_name From sys.databases Where database_id=DB_ID();

clip_image004

כשיוצרים טבלה ובה עמודות טקסט Char/NChar/VarChar/NVarChar ה-Collation שלהן יהיה כשל הדטבייס אלא אם כן הוגדר אחרת. כדאי לציין שלטבלה עצמה אין Collation למרות שעיון ב-Properties שלה יוצר מצג שווא כאילו כן:

clip_image006

טעות שנתקלתי בה: ניסו לברר כיצד זה שיצר את הטבלה או את הדטבייס התייחס ל-Collation על ידי יצירה של סקריפט של האובייקט:

clip_image008

הסקריפט לא כלל התייחסות ל-Collation ולא מפני שמי שיצר אותו לא התייחס לנושא וסמך על ברירת המחדל, אלא מפני שבהגדרות המערכת של ה-SSMS לא ציינו שאנחנו מעוניינים לכלול בסקריפט גם את ה-Collation:

clip_image010

אם נשנה את האופציה ל-True הגדרת ה-Collation תופיע בכל פקודות ה-Create של הטבלאות והדטבייסים גם אם היא לא נכללה במפורש בפקודה המקורית, ולכן אין ללמוד מכך דבר.

בכל מקרה- את ה-Collation של הדטבייס או של העמודה ניתן לשנות בקלות על ידי פקודת Alter Database או Alter Table מתאימה,

ואם ה-Collation של העמודה שונה מזה של הדטבייס אזי או שמלכתחילה העמודה הוגדרה במפורש כ-Collation שונה, או שבדיעבד שונה ה-Collation של אחד מהם.

מודעות פרסומת

תגובה אחת »

  1. נתקלתי בבעיה מעניינת בהקשר של עבודת SSAS מול SQL SERVER: בסיס הנתונים אכן מתעלם מאותיות גדולות וקטנות. ברם, ב- SSAS זה כנראה יוצר קושי כלשהו. בעת עיבוד מימד בו היו ערכים כמו "צינור" ו- "ץינור" (טל"ח) התקבלה הודעת שגיאה על מפתח חסר במימד. אותה הודעה שמתקבלת כאשר ב- FACT TABLE יש ערך שאין במימד. כאמור הודעה זו קופצת בעת עיבוד המימד ולא הקוביה ולכן ברור שההודעה אינה במקומה.
    עניין זה נפתר לאחר שה- collation של שדה זה במימד ב- SSAS שונה ל- Hebrew, Accent sensitive.

    תגובה של רימון חייט — 29/02/2012 @ 11:42


RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: