PDA

View Full Version : کار کردن با یونیکد



problem
پنج شنبه 08 آذر 1386, 17:56 عصر
به نظر می‌رسد که من هنوز کار کردن درست با PHP و MySQL با پشتیبانی از فارسی را یاد نگرفته باشم!

کاری که می‌خواهم بکنم را خیلی ساده می‌کنم که شما بتوانید به راحتی پاسخ بدهید. فرض کنید برنامه‌ای می‌خواهم بنویسم که حروف الفبای فارسی از «ب» تا «ث» را در ستونی به نام colTep از جدولی به نام tblTemp در یک پایگاه داده MySQL وارد کند (هر حرف در یک ردیف از جدول).

ورودی برنامه این رشته است: بپتث (کمی با فاصله هم می‌نویسم که کاملاً واضح باشد: بـــــپــــتــــث) برنامه باید با یک for یا while در طول رشته، هر کاراکتر را بخواند، و بعد در دیتابیس INSERT کند.

باور کنید برنامه به همین سادگی چنان مرا پیچانده که دست به دامان این‌جا شدم. برنامه را لطفاً همین زیر برایم بنویسید.

با تشکر قبلی

oxygenws
پنج شنبه 08 آذر 1386, 22:15 عصر
از توابع multibyte استفاده کن.
یا چون فرمتت خیلی ساده است، خودت هم می تونی شبیه سازی اش کنی :)

problem
جمعه 09 آذر 1386, 00:55 صبح
قبول. حالا، برای مواردی که ورودی از کاربر می‌گیریم (مثل فرم‌ها) و توی دیتابیس می‌بریم، اگر نخوایم که از Binary استفاده کنیم (یعنی بخوایم که محتویات دیتابیس یونیکد باشه، تا بشه با COLLATION مناسب sort کرد و غیره) چه می‌کنیم؟

oxygenws
جمعه 09 آذر 1386, 01:20 صبح
خوب مشکلش چیه الان؟ collation فارسی می ذاری.
پ.ن: شاید دقیقا مشکلت رو نفهمیدم.

problem
جمعه 09 آذر 1386, 12:38 عصر
مشکلم رو خودم هم خوب نفهمیده بودم، اما حالا فهمیدم. فقط یک سوال می‌مونه که راهنمایی کنید.

مشکل من این بود: زمانی که دیتابیس رو ساختم، COLLATION و CHARACTER SET تعریف نکردم. بعداً با کمک ALTER DATABASE این‌ها رو اضافه کردم، اما دیگه TABLEها ساخته شده بود و اطلاعات فارسی هم توشون بود. (طبیعتاً وقتی توی جدول رو نگاه می‌کردم اطلاعات فارسی رو فارسی نمی‌دیدم! اما خوبی‌اش این بود که همون کد PHP که واردشون کرده بود، در برگشت اطلاعات از جدول هم درست -- فارسی -- نشونشون می‌داد). در هر حال، دیگه COLLATION نمی‌شد استفاده کنم.

حالا این مورد رو بی‌خیال شدم. اما برای آموزش خودم، اومدم یک جدول جدید ساختم با ذکر CHARACTER SET و COLLATION و بعد با کمک دستور پایینی، باعث شدم که اطلاعات دقیقاً یونیکد توی جدول ذخیره شن:


mysql_query("SET CHARACTER SET utf8;");

مشکلی که دارم اینه که الان مجبورم این دستور بالایی رو توی تموم صفحه‌هایی که به DB وصل می‌شن بیارم (اگر از اول دیتابیس رو با CHARACTER SET و COLLATION تعریف می‌کردم، این طوری نمی‌شد)، و این یه کمی جانکاهه (البته اگر هیچ راهی نداشته باشه، تمام دستور اتصال به DB رو به همراه دستور بالا می‌برم تو یک فایل، و همه‌جا include می‌کنم که راحت شم).

خواستم بدونم از طریق (مثلا) php.ini یا چیزی مثل اون، نمی‌شه کاری کرد که همیشه پیش‌فرض CHARACTER SET اتصال‌های MySQL رو utf8 در نظر بگیره؟ (یا حتی با بازی کردن با تنظیمات خود MySQL)؟

از توجه شما هم ممنون

oxygenws
جمعه 09 آذر 1386, 14:37 عصر
(البته اگر هیچ راهی نداشته باشه، تمام دستور اتصال به DB رو به همراه دستور بالا می‌برم تو یک فایل، و همه‌جا include می‌کنم که راحت شم).
همین که تا الان این کار رو نکردی شدیدا اشتباه کردی :)


خواستم بدونم از طریق (مثلا) php.ini یا چیزی مثل اون، نمی‌شه کاری کرد که همیشه پیش‌فرض CHARACTER SET اتصال‌های MySQL رو utf8 در نظر بگیره؟ (یا حتی با بازی کردن با تنظیمات خود MySQL)؟
با تنظیمات MySQL میشه ولی رو سرور که دسترسی به این تنظیمات نداری.

problem
شنبه 10 آذر 1386, 14:11 عصر
همین که تا الان این کار رو نکردی شدیدا اشتباه کردی :)
:قهقهه:


با تنظیمات MySQL میشه ولی رو سرور که دسترسی به این تنظیمات نداری.

خوب من همیشه که بنا نیست با سرورهای دیگران کار کنم، گاهی هم با سرور خودمه. روی اون چه طور این کار رو می‌کنیم؟

oxygenws
شنبه 10 آذر 1386, 16:56 عصر
خوب من همیشه که بنا نیست با سرورهای دیگران کار کنم، گاهی هم با سرور خودمه. روی اون چه طور این کار رو می‌کنیم؟
توی فایل my.cnf تنظیمی برای این داریم.
الان دقیقا یادم نیست چی بود، می تونی گوگل کنی یا از طریق mysqladmin variables بیابی اش.

در نهایت، بهترین راه اینه که توی فایل مربوط به اتصالات پایگاه داده، خط مربوطه رو بذاری.