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

03/03/2011

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

שייך לקטגוריה: 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 של התגובות על הרשומה הזו טרקבאק קישור

כתיבת תגובה

Fill in your details below or click an icon to log in:

WordPress.com Logo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

ערכת עיצוב: Shocking Blue Green. בלוג בוורדפרס.קום.

Follow

Get every new post delivered to your Inbox.

הצטרפו אל 25 שכבר עוקבים אחריו