آژانس هواپیماییexchanging

چرا اطلاعات در دیتابیس بد ذخیره میشه؟

شروع موضوع توسط kvm ‏16 آپریل 2010 در انجمن PHP

  1. kvm

    kvm Registered User

    تاریخ عضویت:
    ‏10 جولای 2009
    نوشته ها:
    450
    تشکر شده:
    25
    چرا اطلاعات فارسی در دیتابیس به صورتبزرگترین سیستم همکاری در فر... دخیره میشه؟چطوری میتونم درستش کنم؟
     
  2. TinySkin

    TinySkin Registered User

    تاریخ عضویت:
    ‏17 می 2009
    نوشته ها:
    1,303
    تشکر شده:
    43
    محل سکونت:
    تهران
    شما بايد از طريق phpmyadmin ديتابيست رو utf-8 بكني تا درست بشه
     
  3. ITstudio

    ITstudio Registered User

    تاریخ عضویت:
    ‏16 سپتامبر 2009
    نوشته ها:
    365
    تشکر شده:
    7
    محل سکونت:
    Tehran - IRAN
    آق منم دقیقاً همین مشکل رو دارم و PHP my admin هم بالا نمیاد!!! چی کار کنیم؟!
     
  4. imangh

    imangh Registered User

    تاریخ عضویت:
    ‏17 می 2006
    نوشته ها:
    44
    تشکر شده:
    1
    از دستور SET NAMES برای تنظیم collation استفاده کنید.
     
  5. Rammstein

    Rammstein Registered User

    تاریخ عضویت:
    ‏21 آگوست 2006
    نوشته ها:
    184
    تشکر شده:
    51
    محل سکونت:
    شیراز
    من با phpmyadmin همه جا رو به utf8_persian_ci تغيير دادم (ديتابيس ، جدول ، فيلد)
    اما هنوز اون مشكل دوستون رو دارم
    ميشه دستورش رو يه كم بيشتر توضيح بديد؟
    يعني قبلا از ايجاد ديتابيس از طريق query ، ميشه نوع collation رو تعيين كرد؟
     
  6. imangh

    imangh Registered User

    تاریخ عضویت:
    ‏17 می 2006
    نوشته ها:
    44
    تشکر شده:
    1
    بعد از ایجاد اتصال به بانک و انتخاب بانک پیش‌فرض دستور زیر را نیز فراخوانی کنید:
    PHP:
    mysql_query("SET NAMES 'utf8'");
     
  7. appbannerkhuniresbanner
  8. Rammstein

    Rammstein Registered User

    تاریخ عضویت:
    ‏21 آگوست 2006
    نوشته ها:
    184
    تشکر شده:
    51
    محل سکونت:
    شیراز
    ممنون
    مشكل حل شد
    اما حروف فارسي ذخيره شده تو جدول، تو phpmyadmin به اين صورت نشون داده ميشه :

    &#كد اسكي كاراكتر;

    كه كد اسكي كاراكتر يه كد 4 رقمي هست

    آيا اين تعداد كاراكترهاي ذخيره شده براي حروف فارسي طبيعيه؟
    بعدا كه حجم ديتابيس زياد شد مشكلي پيش نمياد؟

    پ ن : البته الان به اين نتيجه رسيدم كه اينجا هم از همين روش استفاده شده:rolleyes:
     
  9. ariobarzan1

    ariobarzan1 Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2007
    نوشته ها:
    3,066
    تشکر شده:
    167
    محل سکونت:
    شيراز
    راهي هست براي تغيير اين زرگترین سیستم کدها به فارسي اخه ديتابيس ecommerce به صورت کامل به اين شکل هست و اگه تيبل ها رو هم تبديل کنم به UTF-8 اين مشکل همچنان هست
     
  10. imangh

    imangh Registered User

    تاریخ عضویت:
    ‏17 می 2006
    نوشته ها:
    44
    تشکر شده:
    1
    فکر می کنم مشکل شما از کدپیج صفحه HTML است.
    آیا فایل HTML که فرم در آن است دارای کدپیج UTF-8 هست؟
     
  11. imangh

    imangh Registered User

    تاریخ عضویت:
    ‏17 می 2006
    نوشته ها:
    44
    تشکر شده:
    1
    فکر می کنم با این روش بتوانید مشکل را برطرف کنید:
    1- نوع فیلد ها را به Binary تغییر دهید
    2- نوع را به varchar باز گردانید اما این بار Collation مناسب یعنی utf8 را برای فیلد ها انتخاب کنید.
     
  12. ariobarzan1

    ariobarzan1 Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2007
    نوشته ها:
    3,066
    تشکر شده:
    167
    محل سکونت:
    شيراز
    ممنون جواب داد
    ولي يه مسئله اي هست در قسمت هايي که نوع Text هست چيکار بايد کرد
    وقتي که Text رو تبديل مي کنم با باينري ازم يه عدد مي خواهد که وارد کنم در قسمت Length/Values
    با تشکر
     
  13. Profession@l

    [email protected] همکار بازنشسته

    تاریخ عضویت:
    ‏12 می 2007
    نوشته ها:
    2,837
    تشکر شده:
    311
    محل سکونت:
    Sky
  14. avajang.com .leftavajang.com.right
  15. imangh

    imangh Registered User

    تاریخ عضویت:
    ‏17 می 2006
    نوشته ها:
    44
    تشکر شده:
    1
    برای داده های text به جای binary از BLOB استفاده کنید.
    (در ضمن عددی که از شما برای نوع Binary می خواهد طول فیلد است که حداکثر 255 می تواند باشد.)
     
  16. ariobarzan1

    ariobarzan1 Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2007
    نوشته ها:
    3,066
    تشکر شده:
    167
    محل سکونت:
    شيراز
    براي داده هاي تکست درست عمل کرد دستتون درد نکنه ولي يه مشکلي دارم که در زير شرح دادم کاري به داده هاي تکست نداره يه مشکل کلي هست اش:

    کاري که گفتيد انجام دادم حالا در صفحه اصلي اسکريپت تيترها به اين شکل ديده ????? مي شه:
    [​IMG]

    کاري که کردم ابتدا با برنامه يا مد آماده اي که براي کانورت کل ديتابيس بود همه Collation رو به utf-8 تبديل کردم و الان هر جايي از ديتابيس که مراجعه مي کنم utf8_general_ci هست
    بعد در تيبل products_description.sql که مربوط شرح محصولات هست با انتخاب تيبل products_name که مربوط به عنوان محصولات هست کاري که شما در بالا گفتيد يعني تبديل به binery رو انجام دادم و کاري که گفتيد کردم بعد مشاهده کردم که کليه تايتبل ها در ديتابيس به فارسي تبديل شده اما مشکلي که هست در سايت به شکلي که تصويرش رو گذاشتم نمايش مي ده که ديگه نمي دونم اين مشکل رو چه طور بايد حل کرد
    با تشکر
     
    Last edited: ‏20 آپریل 2010
  17. imangh

    imangh Registered User

    تاریخ عضویت:
    ‏17 می 2006
    نوشته ها:
    44
    تشکر شده:
    1
    این به این دلیل است که شما در سایت خود به MySQL نگفتید که از utf8 استفاده می کنید.
    برای رفع این مشکل باید بعد از فراخواهنی تابع mysql_connect از دستوری که در ارسال 6# همین تاپیک نوشتم استفاده کنید.
     
  18. ariobarzan1

    ariobarzan1 Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2007
    نوشته ها:
    3,066
    تشکر شده:
    167
    محل سکونت:
    شيراز
    منظورتون اينه که در خود اسکريپت جايي که مربوط به ديتابيس و ارتباط مي شه بايد از يک دستور که ديتابيس رو به صورت utf-8 فراخوني کنه استفاده کنم
    اگه منظورتون رو درست متوجه شده باشم همينطور هست و با يکي دو تا دستور اين مشکل هم برطرف شد
    يه راهنماي اگه مي شه بفرمائيد چگونه مي شه بدون اينکه محتويات ديتابيس رو تبديل به utf-8 بکنم
    چگونه مي شه کل جداول رو تبديل کنم به utf-8 و بعد از تبديل جداول کليه تيبل ها رو يکي يکي باز کرد و استراچکر رو انتخاب و طبق دستوري که فرموديد يکي يکي عمليات باينري و ... رو انجام داد
    چون يک مشکلي هست با اين کانورتر و وقتي که همه ديتابيس رو تبديل مي کنه utt8 بعد که از عمليات تبديل به باينري استفاده مي کنه ديگه فونت ها فارسي نمي شه
     
  19. ariobarzan1

    ariobarzan1 Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2007
    نوشته ها:
    3,066
    تشکر شده:
    167
    محل سکونت:
    شيراز
  20. ariobarzan1

    ariobarzan1 Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2007
    نوشته ها:
    3,066
    تشکر شده:
    167
    محل سکونت:
    شيراز
    اقا شرمنده خيلي مزاحمتون شدم
    يکي از تيبل ها set('1','2') هست يعني وقتي وارد تيبل مي شم که به باينري تبديل کنم روي گزينه set هست اين رو چيکار کنم
    يکي ديگه از تيبل ها char هست اين رو هم روي باينري بزارم يا بايد يه حالت ديگه تعيين کنم
    با تشکر
     
  21. imangh

    imangh Registered User

    تاریخ عضویت:
    ‏17 می 2006
    نوشته ها:
    44
    تشکر شده:
    1
    اگر خودتون برنامه نویسی کار را انجام ندادید و یا از سیستم اپن سرس استفاده می کنید می توانید کار را به کس دیگه ای بسپارید تا اصلاحات را انجام بده.
    می تونم برای اینکار سایت ParsCoders.com را معرفی کنم بهتون.
    فقط نوع های داده فارسی دارند را تبدیل کنید و بعد از تبدیل فراموش نکنید که داده به نوع اولیه و با collation جدید بازگردانده شود.
    انواع set و enum را نمی خواد کاری کنید.
     
  22. ariobarzan1

    ariobarzan1 Registered User

    تاریخ عضویت:
    ‏19 دسامبر 2007
    نوشته ها:
    3,066
    تشکر شده:
    167
    محل سکونت:
    شيراز
    خير دوست عزيز برنامه نويسي کار نکردم
    ولي خودم چون خيلي اين مسائل رو علاقه دارم يادش گرفتم و همينطوري تجربي کار مي کنم
    تا الان هم تونستم رديف کنم دارم يکي يکي همه رو اوکي مي کنم انشاالله اگه مشکلي بود مطرح مي کنم راهنمايي بفرمائيد
    اون قسمت هايي که فرموديد بله متوجه شدم فقط تبديل مي کنم به utf8 و ديگه تبديل به باينري نمي کنم
    با تشکر