טקסט בעברית הופך לסימני שאלה בשאילתות מול בסיס הנתונים

3 ביולי 2012

3 תגובות

כידוע לכולם כדי שנוכל להכניס בבסיס הנתונים תווים לא באנגלית (עברית למשל) השדות צריכות להיות מוגדרות כ – nvarchar, ולא כ – varchar.

ולכן מה רבה הייתה הפתעתי שכששלחתי שאילתא לבסיס הנתונים (הפעלה של stored procedure באמצעות Entity Framework) כשבמשפט Where נשלחו תוים בעברית – לא קבלתי שום תוצאה, לאחר שפתחתי את ה – Sql Profiler גיליתי שהתווים נשלחו כסימני שאלה (אע"פ שבבסיס הנתונים עצמו התווים היו בעברית).

לחיצה ימנית על בסיס הנתונים ובחירה במאפיינים הראתה לי משהו מעניין.

image

 

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

בכל מקרה כדי לשנות את ה – Collate, צריך להריץ את הסקריפט הבא:

ALTER DATABASE [MyDB] COLLATE Hebrew_100_CI_AS

או כמובן בכל Collate שתבחרו.

אופציה קלה יותר היא ללכת לטאב Options ולשנות מתוך הרשימה.

ייתכן שבסיס הנתונים יתעקש על כך שיש Constraints שהוא לא יכול להמיר, ולכן תצטרכו ראשית למחוק את אותם Constraints ולאחר השינוי להחזיר אותם, בנוסף הוא לא יכול לעשות זאת כשיש לו Session פתוח, ובמקרה זה ניתן פשוט לעשות restart ל – Sql Service.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

3 תגובות

  1. צח פניגשטיין18 ביולי 2012 ב 18:30

    שינוי collation הוא תהליך ארוך וכואב, ומ-א-ו-ד מומלץ לא לעשות אותו אם אתם לא DBAים.
    גם DBAים בורחים מדרישה כזו כמו מאש.

    אם הגדרת טיפוס נתונים מסוג nvarchar בניגוד ל varchar, תן לו את הכבוד המגיע לו.
    כלומר
    DECLARE @nchar NVARCHAR(255) = N'זה לא יהפוך לסימני שאלה'

    שימו לב ל N לפני הגרש, שמציין שמדובר בערך יוניקוד, ולא אסקי.

    הגב
  2. Shlomo18 ביולי 2012 ב 22:53

    המאפיין NVARCHAR יתמוך בעברית בכל COLLATION.
    אבל הפעלת SP דרך EF, עם ה – COLLATION לא עברית ישלחו סימני שאלה.

    הגב
    1. poijok12 בדצמבר 2013 ב 15:49

      אני משתמשת ב developer 2008
      ואחרי ששניתי לnvarchar ,עדיין מציג לי סימני שאלה

      הגב