01-11-2005, 01:05
|
|
|
|
חבר מתאריך: 20.06.03
הודעות: 5,616
|
|
מדריך הגירה ל-MySql עם Collation
בחודשים האחרונים, רבים הפנו אלי שאלות לגבי הגירה בין מסדי נתונים מסוג MySql.
חברות אחסון רבות שידרגו את מסדי הנתונים שלהם לגרסה > 4.1.
גרסאות אלה תומכות רק UTF8 Unicode - ובאספקט חדש הנקרא collation.
למי שהתחיל לעבוד מלכתחילה עם מסד נתונים מסוג זה, אין בעייה, וגם למי שצריך לעשות הגירה
לאחור - כלומר לעבור מגרסה 4.1+ לגרסה 4.1- (גרסה הקטנה מגרסה 4.1) גם בדרך כלל לא
נתקל בבעייה.
הבעייה העיקרית היא לאלו שצריכים לעבור מגרסה נמוכה לגרסה 4.1+ ואז הפלט תמיד, אבל תמיד
יוצא כג'בריש (IE) או סימני שאלה (FF). להלן מדריך קטן איך לעבור בשלום את ההגירה הזו.
(מדריך זה נכתב עקב נסיון שלי להתמודד עם בעייה דומה של לקוח שחברת האחסון שידרגה
את שרתי ה-MySql שלה ללא הודעה מוקדמת)
תהליך ההמרה:
אם מסד הנתונים שלך מראש לא היה UTF-8, זה הזמן להעביר אותו. ייצאו את מסד הנתונים לקובץ, פתחו
את הקובץ ב-notepad (או כל עורך התומך בריבוי קידודים) ושימרו את הקובץ בקידוד UTF8, (שימו לב
שאחרי ההמרה תוכלו לפתוח את הקובץ ולקרא עברית תקינה).
כעת, לאחר שברשותכם קוד SQL בעברית בקידוד UTF8, זה הזמן לטפל במסד הנתונים עצמו.
פתחו את מסד הנתונים באמצעות מנהל מסד הנתונים החביב עליכם, בדוגמה זו אני אתייחס ל- phpMyAdmin.
בדף הבית של שרת MySql יש לבחור את הקידוד ואת ה- Collation:
הקידוד הוא כמובן Hebrew, להזכירכם, כל הקידודים הינם UTF8.
ואת ה- Collation יש לבחור כ- Hebrew_bin.
בדף מסד הנתונים שלכם, נגדיר את Collation ברירת המחדל של השדות שלנו:
לאחר הגדרת מסד הנתונים, נייבא את קובץ מסד הנתונים שייצאנו משרת MySql בגרסה < 4.1 ונוודא
שאנו קוראים תכנים בעברית תקינה.
עד כאן תהליך הייבוא תקני למדי למעט ה-Collation.
אם נבצע שאילתה ונשלח את הפלט לדפדפן, אפילו אם הגדרנו את התג הבא:
קוד PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
נקבל את הטקסט העברי שגוי.
על מנת לפתור את הבעייה, נבצע שני דברים:
הראשון, שתמיד מומלץ כאשר אנו מטפלים בתוכן עברי בתוך קבצי php (במיוחד כאלה שלא מטפלים בפלט
למסך, אלא רק בעיבוד נתונים, מסדי נתונים כו) - הוא לשים בראש כל קריאות ה-PHP קריאת header
לקידוד.
אם יש לנו קריאות header משלנו, פשוט נוסיף שורה נוספת זו:
קוד PHP:
header('Content-Type: text/html; charset=utf-8');
שורה זו מודיעה לדפדפן, שהתוכן הנשלך אליו הוא בקידוד UTF8.
הדבר השני והחשוב הוא להגדיר למסד הנתונים את השפה בה נכתב הטקסט השמור. זה אחד התוספות
המעצבנות מעט, אך שחובה לעשותן ב-MySql בגרסה 4.1 ומעלה.
לאחר ביצוע החיבור למסד הנתונים, נשלח את השאילתות הבאות למסד הנתונים:
קוד PHP:
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die('Could not connect: ' . mysql_error()); } . . . mysql_query("SET character_set_client = utf8"); mysql_query("SET character_set_connection = utf8"); mysql_query("SET character_set_results = utf8");
שאילתות אלה יגדירו למסד הנתונים את תצורת העבודה שלו בחיבור הנוכחי (עברית).
ותוצאות השאילתות שעד כה התקבלו בג'יבריש - יהיו בעברית צחה!
בהצלחה,
נערך לאחרונה ע"י fat fish בתאריך 01-11-2005 בשעה 01:12.
|