PDA

View Full Version : مشکل فارسی با JSON



binboy
پنج شنبه 28 مهر 1390, 23:13 عصر
سلام، یکسری از اطلاعات آرایه را توسط json_encode در یک سطر(ستون) دیتابیس درج کردم، حالا قصد دارم با query زیر select اطلاعات را با یک HAVING انجام بدم، متاسفانه این HAVING در این query برای عبارت فارسی کار نمی کنه :
برای مثال سطر row_s در دیتابیس همچین است:


row_s id 1: ["All5","\u0648\u06cc\u0632\u0627 8"]
row_s id 2: ["All5","\u0648\u06cc\u0632\u0627 7"]
row_s id 3: ["All5","\u0648\u06cc\u0632\u0627 6"]


اینم کد php من، که خروجیش "There is not" هست:


$val = 'ویزا 8';
$query = $this->db->query('SELECT * FROM table HAVING row_s LIKE "%' . $val . '%"');
if ($query->num_rows() > 0) {
foreach ($query->result() as $val) {
echo $val->name . '<br>';
}
} else {
echo 'There is not';
}


جالب انگیزش اینجاست که، این HAVING زیر درست کار میکنه برای عدد یا حروف لاتین، برای مثال کد زیر خروجی دارد و $query->num_rows() برابر با 3 است:


$val = 'All5';
$query = $this->db->query('SELECT * FROM table HAVING row_s LIKE "%' . $val . '%"');
if ($query->num_rows() > 0) {
foreach ($query->result() as $val) {
echo $val->name . '<br>';
}
} else {
echo 'There is not';
}

فایل php و Collation چارترشون "utf-8" و "utf8_general_ci" است. چجوری این مشکل را حل کنم؟

rezakho
جمعه 29 مهر 1390, 00:45 صبح
سلام
نمی دونم اینکار را انجام دادی یا نه؟
ولی باید بلافاصله بعد از انتخاب دیتابیس یک کوئری مثل کد زیر انجام بدی تا با فارسی مشکل نداشته باشی


mysql_query("set names utf8");

binboy
جمعه 29 مهر 1390, 08:38 صبح
مطمئنی عملی میشه؟

tux-world
جمعه 29 مهر 1390, 08:43 صبح
مطمئنی عملی میشه؟

شما لطف کن اول خودت تست کن بعد بگو مطمئنی دوست من . اون عزیز که کدت تو رو ننوشته بدونه. جن و موکل هم استخدام نکرده از راه دور حدس بزنه دقیق درسته یا نه

binboy
جمعه 29 مهر 1390, 13:53 عصر
rezakho: متاسفانه جواب نداد.
در پوشه config کودیگنیتر فایل database.php تنظیمات بصورت پیشفرض اینجور است: توضیحات (http://codeigniter.com/user_guide/database/configuration.html)


$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_persian_ci';


البته این مشکل هیچ ربطی به کودیگنیتر نباید داشته باشه.
tux-world: عصبی نشو، شما راست میگی باید اینکار رو میکردم.

پیشنهادات دیگه دارید؟

ali zi zeperto
جمعه 29 مهر 1390, 15:03 عصر
من با کوئری های فارسی مشکل داشتم که با
mysql_set_charset('utf8'); حل شد.امیدوارم مشکل شما رو هم حل کنه.قبل از اجرای کوئری بذاریدش.

binboy
جمعه 29 مهر 1390, 20:55 عصر
استفاده کردم ولی نشد، کد زیر همون کارا میکنه:

$db['default']['char_set'] = 'utf8';

farhadfery
جمعه 29 مهر 1390, 23:36 عصر
من از فرصت استفاده کنم!:چشمک: HAVING کارش چیه؟

Reza1607
شنبه 30 مهر 1390, 01:20 صبح
يه جورايي مثل where‏ ميمونه
براي كذاشتن شرط استفاده ميشه
البته بايد با qroup by‏ استفاده بشه

rezakho
شنبه 30 مهر 1390, 02:58 صبح
آقا پس این پست قبلی ما چرا نیامد؟
عیبی نداره
binboy عزیز
داخل مستندات کودگنیتر ، همان لینک بالا ، یک نکته داره که گفته اگر php و یا mysql از یه نسخه ای پایینتر باشه
با یونیکد مشکل خواهی داشت!
بررسی کن ببین دقیقا چی میگه.

رضا قربانی
دوشنبه 02 آبان 1390, 00:58 صبح
بعد از وصل شدن به بانک این کوئری رو پیاده سازی کن

mysql_query('SET NAMES `utf8`;', $link);

و زمانی که از این کوئری استفاده می کنی باید بانکت از نوع utf8_persian_ci باشه .

و اطلاعاتی هم که در بانک ذخیره می شه باید به این صورت باشه . شما بانکت رو تغییر بده و اطلاعات ذخیره بانک کن و تست بزن

حالا یه تست بزن ببین جواب می ده . شاید مشکلت حل شد.

tux-world
سه شنبه 20 دی 1390, 10:11 صبح
نميدونم اين بحث كجا رسيد و آخرش درست شد يا نه ولي ميخواستم بدونم اصلاعات رو به صورت utf8 درست در ديتابيس وارده كرده بود يانه؟