مشکل کیبرد در ثبت در دیتابیس

ساخت وبلاگ
  • دوشنبه 20 آذر 1396, 11:21 صبح #1

    مشکل کیبرد در ثبت در دیتابیس

    سلام
    یه مشکلی برام پیش اومده تو برنامه ای که نوشتم کاربر وقتی توی دیتابیس چیزی رو ثبت میکنه توی یک سیستم دیگه نمیتونه جستجو کنه
    بعد از کلی فهمیدم که کیبردش عربی هست و مثلا ی رو ي ثبت میکنه
    و توی سیستم دیگه که کیبردش فارسی هست دیگه نمیشه جستجو کرد مقادیری که ثبت شده
    دیتابیس utf8_persian_ci هستش تو برنامه هم از utf8 توی کانکشن استفاده کردم
    راه حلی دارین که بشه این مشکل رو حل کرد؟

  • دوشنبه 20 آذر 1396, 11:50 صبح #2

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    برای چنین مسائلی معمولا راه حل اینه همه کاراکترهای معادل اما متفاوت رو به یک کاراکتر تبدیل کنید هم تو دیتابیس هم تو کوئری که از فرد گرفته میشه.
    مثلا تفاوت هایی که وجود داره اعداد است. اعداد استاندارد انگلیسی هست، اعداد فارسی و اعداد عربی. که بهتره همشون به یه چیز تبدیل بشن.
    در مورد حروف هم حروفی مثل "ی" و "ي" و "ک" و "ك" رو باید به یک کاراکتر تبدیل کنید. هر چند ممکنه بعضیا "ه" و "ة" رو هم جا به جا بنویسن ولی احتمالش خیلی کمه و این دو تا دو حرف جداگونه هستند. ولی اون دو مثال قبلی رسم الخط متفاوتی هستند.

  • کاربرانی که به خاطر مطلب مفید vahid-p از وی تشکر کرده‌اند:


  • دوشنبه 20 آذر 1396, 11:56 صبح #3

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    مشکل اینجاست که فقط حرف مثلا س رو هم با کیبرد عربی مینویسه باز اون مشکل پابرجاست هر حرفی با اون سیستم مینویسه توی این یکیا سرچ نمیشه
    چون کلی دیتا هم باهاش ثبت کرده نمیشه کل دیتابیس رو پاک کرد که چاره کار چیه الان؟

  • دوشنبه 20 آذر 1396, 12:24 عصر #4

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    البته این کد رو پیدا کردم

    update tbl_primarysubstance set primarysubstances=REPLACE(primarysubstances,'ي',N 'ی')
    update tbl_primarysubstance set primarysubstances=REPLACE(primarysubstances,'ك',N 'ک')

    ولی اگه بخوام تمام تیبل ها ور کلوم هارو یکی یکی اینجوری آپدیت کنم پوستم کنده میشه که


  • دوشنبه 20 آذر 1396, 13:37 عصر #5

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    دستی یا کد باید بنویسید و کل دیتابیس رو آپدیت کنید. راه دیگه ای به ذهنم نمیرسه
    فقط بهتره برید تمام حروف رو با اون کیبورد بنویسید و کد هر کدوم رو بگیرید و با یک کیبورد فارسی رو همین کار رو انجام بدید تا ببینید کدوما کدشون متفاوته. حرف "س" متفاوت نیست، ولی خب باز چک کنید شاید مشکل یه جای دیگست. از جدول این سایت هم میتونید استفاده کنید: https://unicode-table.com/en/

    برای کدهای عربی (که شامل عربی، فارسی، کردی و... میشه): https://unicode-table.com/en/blocks/arabic/
    برای کدهای عربی تکمیلی (که بعید میدونم به کارتون بیاد): https://unicode-table.com/en/blocks/arabic-supplement/
    برای کدهای عربی باز توسعه داده شده (که بازم به کار نمیاد): https://unicode-table.com/en/blocks/arabic-extended-a/


  • کاربرانی که به خاطر مطلب مفید vahid-p از وی تشکر کرده‌اند:


  • دوشنبه 20 آذر 1396, 13:47 عصر #6

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    ممنون از وقتی که گذاشتی یه سوال دیگه هم دارم متوجه نشدم چطوری باید کاری کنم کاربر اگه توی تکست باکس ك نوشت خودش درست بشه و تبدیل به ک بشه!
    البته این کد رو پیدا کردم ولی نفهمیدم چطوری ازش استفاده کنم

    public String SafeFarsiStr(String input)
    {
    return input.replace("ي", "ی").replace("ك", "ک");
    }

  • دوشنبه 20 آذر 1396, 15:04 عصر #7

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    اینکه بخوای نوشته تو textbox درست بشه ممکنه کارت رو سخت کنه و هندل کردنش معمولا یه سری مشکلات جزئی درست میکنه (میشه مثلا رو keyrelease یک listener بذاری و هی رشته قبلی رو حذف و رشته تصحیح شده تو textbox جایگزین کنی ولی اینکار رو توصیه نمیکنم). بذار هر چی خواست بنویسه، وقتی میخوای تو دیتابیس جستجو کنی با این تابع رشته تصحیح شده رو به جای رشته اصلی در دیتابیس جستجو کن.

  • دوشنبه 20 آذر 1396, 15:08 عصر #8

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    مثل همین دستور

    update tbl_primarysubstance set primarysubstances=REPLACE(primarysubstances,'ي',N 'ی')
    update tbl_primarysubstance set primarysubstances=REPLACE(primarysubstances,'ك',N 'ک')

    دستوری توی جاوا نیست که بگم وقتی jtext روش KeyReleased میشه اگه "ي" وارد شده بود تبدیل بشه به "ی" و اگه "ك" وارد شده بود تبدیل بشه به "ک" البته بدون اینکه متن نوشته شده خراب بشه فقط این 2 تا حرف تغییر پیدا کنن؟

  • دوشنبه 20 آذر 1396, 15:13 عصر #9

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    نقل قول نوشته شده توسط vahid-p

    اینکه بخوای نوشته تو textbox درست بشه ممکنه کارت رو سخت کنه و هندل کردنش معمولا یه سری مشکلات جزئی درست میکنه (میشه مثلا رو keyrelease یک listener بذاری و هی رشته قبلی رو حذف و رشته تصحیح شده تو textbox جایگزین کنی ولی اینکار رو توصیه نمیکنم). بذار هر چی خواست بنویسه، وقتی میخوای تو دیتابیس جستجو کنی با این تابع رشته تصحیح شده رو به جای رشته اصلی در دیتابیس جستجو کن.

    آخه جدا از اینکه نمیدونم کلا باید چیکار کنم اینجوری باید هم توی ثبت هم توی ویرایش هم توی جستجو بیام اون حروف رو تبدیل کنم کار 3 برابر بیشتر نمیشه؟

  • دوشنبه 20 آذر 1396, 16:50 عصر #10

    نقل قول: مشکل کیبرد در ثبت در دیتابیس

    این هم شاید بشه استفاده کرد

    private void txtsearchKeyReleased(java.awt.event.KeyEvent evt) {
    // TODO add your handling code here:
    String a = txtsearch.getText();
    String b = a.replace("ي", "ی");
    txtsearch.setText(b);

    String c = txtsearch.getText();
    String d = c.replace("ك", "ک");
    txtsearch.setText(d);
    }

    آخرین ویرایش به وسیله cnmeysam : دوشنبه 20 آذر 1396 در 17:57 عصر

  • برنامه نویس...
    ما را در سایت برنامه نویس دنبال می کنید

    برچسب : دیتابیس, نویسنده : محمد رضا جوادیان programers بازدید : 296 تاريخ : دوشنبه 20 آذر 1396 ساعت: 20:38