טכני – באיזה בסיס סופרים בסיסי נתונים

דבר ראשון – פתחתי קטגוריה חדשה. קראתי לה “שחרור קיטור טכני”. בקטגוריה הזו אני שם כל פוסט שהוא דיון טכני על דברים מעצבנים שאני נתקל בהם במהלך עבודתי השוטפת. אם אתם לא מעונינים בפרטים טכניים מעיקים – אתם יכולים לסנן את הרשימות האילו ללא חשש.

את יום שישי הקדשתי לבחור הזה, שהיה צריך שאני אוסיף תמיכה בסוג משתנה חדש. המשתנה “numeric” פירושו מספר בעל דיוק גבוה כרצונכם. בעודי עובד על לתרגם את הצורה בה PostgreSQL מייצג את המספר לצורה שבה מיקרוסופט מצפים לקבל את המספר, התגלו לי כמה עובדות משעשעות (או משעשעות פחות).

1. PostgreSQL שומר את הנתונים בוריאציה על בסיס, שהדחקתי את קיומו, שנקרא “BCD”. לא בדיוק בינארי, לא בדיוק עשרוני. הרעיון (המעוות) הוא שאתם שומרים כל כמה ספרות עשרוניות בבינארי. התוצאה היא שכדי לתרגם את הסיפור הזה לבינארי רגיל, צריך להתחיל לעשות פעולות כפל וחילוק. כבר ציינתי שהמספרים הם בעלי דיוק מוחלט? הייתי צריך להתחיל לממש כפל ארוך בתוכנה. גרר.
2. את הנתונים לגבי איפה המספר נמצא (אקספוננט), הוא שומר בבסיס עשרוני. אני מניח שזה הגיוני, לאור זה שככה גם המספר עצמו נשמר.
3. OLE DB של מיקרוסופט, מצד שני, שומר את הנתונים בבינארי רגיל. מצויין!
4. את הנתונים על איפה על איפה המספר נמצא (אקספוננט) הוא שומר בעשרוני!! מה???

התוצר הסופי כולל תרגום ממספר עשרוני של 39 ספרות למספר בינארי של 39 ספרות עשרוניות, חישוב כמה ספרות עשרוניות זה הספרות הבינאריות, ושאר דברים טובים. נו טוב – מי אמר שתיכנות זה דבר קל?

שחר

Bear