collation ؟
شهرام ناظری در آلبوم شورانگیز میگه:
بی تو در کلبه گدایی خویش
رنجهایی کشیدهام که مپرس!
تا به حال چند بار (شاهد مثال 1 و 2 ) در بکاپ و ری استور دیتابیس برای وردپرس ثبتی یا همان دات ارگ مشکل داشتهام. مشکل در Character set و collation است! ایندفعه هم حکایت ما از آنجا آغاز شد که روزی خواستیم تجربه کنیم wpmu را ! و اما شرح ماوقع با مقدمه:
1- یکی از روشهای تهیه نسخه پشتیبان از پایگاه داده وردپرس، استفاده از افزونه WordPress Database Backup است. در صورتیکه این پلاگین را نصب و فعال کرده باشید، میتوانید بصورت دستی یا اتوماتیک بکاپ بگیرید.
2- یکی دیگر از روشهای تهیه بکاپ، استفاده از امکانات کنترل پنل هاست است.
در cpanel هاست لینوکسی، میتوانید از دستور backup wizard در قسمت files و یا از امکانات phpmyadmin در قسمت databases استفاده کنید.
قطعا خروجی هر 2 روش تهیه بکاپ فوق الذکر با هم متفاوت است!
3- برای برگرداندن نسخه بکاپ، طبق دستورات اینجا و اینجا، بایستی از امکان import در phpmyadmin استفاده کنید.
4- وقتی خواستم wpmu را بررسی کنم، آمدم و مطالب این وبلاگ – کامپیوترشناسان و گروهلاگ را ادغام کردم. بعد که دیدم به درد من نمیخوره، دوباره رفتم سراغ برپا کردن کامپیوترشناسان. دوباره به مشکل عدم نمایش صحیح کرکترهای فارسی پس از import برخوردم. مشکل از این قرار بود که محتوای پستها درست نمایش داده میشد اما وقتی کامنت جدیدی میگذاشتم، کرکترهای آن با علامت ؟ نشان داده میشد! این دفعه گفتم باید علت را پیدا کنم.
5- به تصویر زیر که لیست جداول یک دیتابیس دیگر است، با دقت نگاه کنید
محتوای ستون collation برای همه جداول یکسان و برابر latin1_swedish_ci است الا جدول recentlinks
نمیدونم چی شده بود که در دیتابیس ری استور شده مذکور در بند 4، collation همه جداول utf8 شده بود ولی مال جدول comments شده بود latin1؟؟؟
6- الآن collation جداول دیتابیس سایت شخصی من utf8_general_ci است که نمیدانم چرا اینطور شده؟! دقت کردم دیدم در فایل wp-config سایت شخصی، دستور زیر قرار دارد
define(‘DB_CHARSET’, ‘utf8’)
7- موقعی که میخواهید بکاپ را برگردانید، میتوانید کرکتر ست را تغییر دهید
8- درhome یا همان صفحه اصلی phpmyadmin یک انتخاب برای تغییر connection collation وجود دارد. کسی میداند برای چیست؟ من کماکان در برگرداندن بکاپها مشکل دارم. حتی زمانی که collation یک دیتابیس latin1 هست ولی وقتی موقع ایمپورت، کرکتر ست را latin1 هم میگذارم، باز هم ممکن است متون فارسی پستها یا کامنتها بدرستی نمایش داده نشود (بند 3 این پست را بخوانید)! چرا؟
در پست دیگری در مورد مفاهیم کرکتر ست و collation صحبت خواهم کرد.
“در صفحه اصلی phpmyadmin یا همان home یک انتخاب برای تغییر connection collation وجود دارد. کسی میداند برای چیست؟ ”
اون برای query هایی هست که به mysql ارسال میشه، مثلا اگر یه جدول جدید درست کنید ولی collation رو مشخص نکنید، از اینجا میخونه
همچنین موقع اجرای query های دیگه
نمیدونم مشکل شما چه طوریه
ولی اگه کاراکترهای فارسی داخل فایل بک آپ رو درست میتونید ببینید (مثلا اگه با notepad++ بازش کنید) به صورت عادی یه دیتابیس جدید درست کنید، وارد phpmyadmin بشید و دیتابیس رو انتخاب کنید(از سمت چپ)، حالا تب Operation رو بزنید و تو همون صفحه collation رو میتونید انتخاب کنید، بگذاریدش روی یکی از utf8 ها، مثلا utf8_unicode_ci
بعدش دیتابیس رو ایمپورت کنید
اگه کاراکترها رو با phpmyadmin درست میبینید، اونخط define(‘DB_CHARSET’, ‘utf8′) رو هم اضافه کنید
@Mohammad,
سلام
حقیقتش کمی این پاسخ شما کمکم کرده
کمی هم خودم با مطالعه
http://dev.mysql.com/doc/refman/5.0/en/charset-general.html
سر در آورده ام
اما هنوز کمی گیجم
با ایمیل با شما تماس میگیرم
ممنون
مطلب عالی بود، خیلی به دردم می خوره
ازت ممنونم
@مایا,
خواهش میکنم
اما از نظر من هنوز ناقصه