• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل collations ها در هنگام کار با دیتابیس
#1
Question 
سلام
وقتی داده های فارسی رو در دیتابیس میخوام سلکت کنم به ارور زیر بر میخورم
کد پی‌اچ‌پی:
#1271 - Illegal mix of collations for operation 'like' 
مشکل چیه؟
  پاسخ
تشکر شده توسط :
#2
کد سلکت کردنت رو بزار عزیزم
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط :
#3
(۱۳۹۱ شهریور ۱۸, ۰۲:۴۹ ب.ظ)molana نوشته: کد سلکت کردنت رو بزار عزیزم
کاملش رو پایین گذاشتم.
یکم بیشتر که بررسی کردم دیدم اگر در سلکت، فیلدهایی باشن که Collation اشون متفاوت باشه این ارور رو خواهم گرفت.
مثلا اگر در شرط جستجو فیلد datetime هم باشه این ارور دریافت میشه.
و از اونجایی که کوئری سلکت رو من تولید نمیکنم نمیتونم این فیلدها رو حذف کنم (اصلا کاربر شاید بخواد زمان رو هم جستجو کنه)
راه حل چیه؟


کد پی‌اچ‌پی:
select vtiger_invoice.invoice_no,vtiger_invoice.subject,vtiger_invoice.salesorderid,vtiger_invoice.invoicestatus,vtiger_invoice.total,case when (vtiger_users.user_name not like ''then CONCAT(vtiger_users.first_name,' ',vtiger_users.last_name) else vtiger_groups.groupname end as user_name ,vtiger_crmentity.crmid,vtiger_contactdetails.contactid,vtiger_account.accountid FROM vtiger_invoice INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid vtiger_invoice.invoiceid INNER JOIN vtiger_invoicebillads ON vtiger_invoice.invoiceid vtiger_invoicebillads.invoicebilladdressid INNER JOIN vtiger_invoiceshipads ON vtiger_invoice.invoiceid vtiger_invoiceshipads.invoiceshipaddressid LEFT JOIN vtiger_currency_info ON vtiger_invoice.currency_id vtiger_currency_info.id LEFT OUTER JOIN vtiger_salesorder ON vtiger_salesorder.salesorderid vtiger_invoice.salesorderid LEFT OUTER JOIN vtiger_account ON vtiger_account.accountid vtiger_invoice.accountid LEFT JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid vtiger_invoice.contactid INNER JOIN vtiger_invoicecf ON vtiger_invoice.invoiceid vtiger_invoicecf.invoiceid LEFT JOIN vtiger_groups ON vtiger_groups.groupid vtiger_crmentity.smownerid LEFT JOIN vtiger_users ON vtiger_users.id vtiger_crmentity.smownerid WHERE vtiger_invoice.invoiceid 0  AND vtiger_crmentity.deleted 0  and (vtiger_invoice.subject LIKE '%شرکت%' OR vtiger_invoice.salesorderid LIKE '%شرکت%' OR vtiger_invoice.customerno LIKE '%شرکت%' OR vtiger_invoice.contactid LIKE '%شرکت%' OR vtiger_invoice.invoicedate LIKE '%شرکت%' OR vtiger_invoice.duedate LIKE '%شرکت%' OR vtiger_invoice.purchaseorder LIKE '%شرکت%' OR vtiger_invoice.adjustment LIKE '%شرکت%' OR vtiger_invoice.salescommission LIKE '%شرکت%' OR vtiger_invoice.exciseduty LIKE '%شرکت%' OR vtiger_invoice.subtotal LIKE '%شرکت%' OR vtiger_invoice.total LIKE '%شرکت%' OR vtiger_invoice.taxtype LIKE '%شرکت%' OR vtiger_invoice.discount_percent LIKE '%شرکت%' OR vtiger_invoice.discount_amount LIKE '%شرکت%' OR vtiger_invoice.s_h_amount LIKE '%شرکت%' OR vtiger_invoice.accountid LIKE '%شرکت%' OR vtiger_invoice.invoicestatus LIKE '%شرکت%' OR vtiger_crmentity.smownerid LIKE '%شرکت%' OR vtiger_crmentity.createdtime LIKE '%شرکت%' OR vtiger_crmentity.modifiedtime LIKE '%شرکت%' OR vtiger_invoice.currency_id LIKE '%شرکت%' OR vtiger_invoice.conversion_rate LIKE '%شرکت%' OR vtiger_invoicebillads.bill_street LIKE '%شرکت%' OR vtiger_invoiceshipads.ship_street LIKE '%شرکت%' OR vtiger_invoicebillads.bill_city LIKE '%شرکت%' OR vtiger_invoiceshipads.ship_city LIKE '%شرکت%' OR vtiger_invoicebillads.bill_state LIKE '%شرکت%' OR vtiger_invoiceshipads.ship_state LIKE '%شرکت%' OR vtiger_invoicebillads.bill_code LIKE '%شرکت%' OR vtiger_invoiceshipads.ship_code LIKE '%شرکت%' OR vtiger_invoicebillads.bill_country LIKE '%شرکت%' OR vtiger_invoiceshipads.ship_country LIKE '%شرکت%' OR vtiger_invoicebillads.bill_pobox LIKE '%شرکت%' OR vtiger_invoiceshipads.ship_pobox LIKE '%شرکت%' OR vtiger_crmentity.description LIKE '%شرکت%' OR vtiger_invoice.terms_conditions LIKE '%شرکت%' OR vtiger_invoice.invoice_no LIKE '%شرکت%' OR vtiger_crmentity.modifiedby LIKE '%شرکت%'
  پاسخ
تشکر شده توسط :
#4
چرا باید datetime رو با like انتخاب کنی ؟
  پاسخ
تشکر شده توسط :
#5
دارم روی یک cms کار میکنم
برای جستجو کاری که میکنه اینه که تمام جداول رو فیلدهاش رو با کوئری میکشه بیرون و دوباره برای هرکدوم یک کوئری مثل کوئری ای که در بالا گذاشت تولید میکنه .یعنی در تمام فیلدهای جداول میگرده دنبال کارکترهای مورد نظر کاربر
اگر بخوام این فرایند رو تغییر بدم و بصورت دستی جستجو رو راه اندازی کنم، یعنی دونه دونه کوئری ها رو ایجاد کنم کار خیلی زمان بری هستش.

بهترین راه اینه که این ارور رو رد کنم یک طوری.
  پاسخ
تشکر شده توسط :
#6
ببین اون طوری که من فهمیدم شما فیلد اعداد و زمان و کلا" همه چیز رو با لایک جستجو میکنی ! خب اینطوری نمیشه که . ضمنا" برای جستجو لازم نیست که همه فیلد ها رو جستجو کنی . بعدشم مثلا" برای زمان کاربر چی باید وارد کنه که جستجو درست کار کنه ؟! نمیشه اصلا" اینجوری ...
  پاسخ
تشکر شده توسط :
#7
فقط زمان نیست
داخل cms ده ها جدول و صد ها فیلد مختلف مثل آی دی و شماره تلفن و چیزهای دیگه هستش
که کاربر با جستجوی کارکترهای دلخواه میتونه همزمان تمام اونها رو بگرده
و اینکه جستجو برای داده های انگلیسی درست انجام میشه ولی همین که کاربر کلمات فارسی وارد میکنه این اشکال پیش میاد
[عکس: i455236_search.png]
  پاسخ
تشکر شده توسط :
#8
خوب مجبور شدم تاریخ ها رو از این نوع جستجو حذف کنم
برای این کار از این شیوه استفاده کردم

کد پی‌اچ‌پی:
$result_myconn mysql_query("SHOW FIELDS FROM $tablename WHERE Field = '$columnname'" $myconn);
while (
$row mysql_fetch_assoc($result_myconn)) {
    
$type $row['Type'];

if(
$type!='date' and $type!='datetime'){
    if(
strstr($listquery,$tablename)){
        if(
$where != ''){
            
$where .= " OR ";
        }
    
$where .= $tablename.".".$columnname." LIKE '"formatForSqlLike($search_val) ."'";

  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان