PDA

View Full Version : سوال: یه مشکل در آپدیت وازه فارسی در mysql با PHP



skysings
سه شنبه 23 آبان 1391, 19:10 عصر
با سلام
یه برنامه نوشتم که یک عبارت فارسی رو میگیره و جدولی رو برای این مقدار جستجو میکنه و اگر این مقدار موجود نباشه داخل جدول درج میکنه اما اگه از قبل وجود داشته باشه اون رو آپدیت میکنه.
جزئیات:
جدول من دارای 2 ستون به اسم های name و str :
اگر عبارت فارسی ارسال شده در name نباشه از دستور زیر استفاده میکنه:

insert TB1 values('$GRP','$ID')
و اگه موجود باشه از دستور زیر استفاده میکنه:

update TB1 set str=concat(str,'AAA') where name=\"$GRP\"
همه چی درست کار میکنه! اما مشکل زمانیه که یک کلمه که دارای حرف ف هست رو می خوام با دستور دوم آپدیت کنم! که مشکل زیر رو میده:

Illegal mix of collations (utf8_persian_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='
اما با دستور اول هیچ مشکلی پیش نمیاد
خواش دارم منو راهنمایی کنید خیلی باهاش ور رفتم اما کلافم کرده!
مرسی

Unique
چهارشنبه 24 آبان 1391, 15:50 عصر
این مشکل وقتی پیش میاد که میخوای یک عملی را روی دو تا رشته از دو collation متفاوت انجام بدی !
به نظر من بهتره توی phpmyadmin وقتی db را انتخاب میکنی collation را بگذاری روی utf8_persian_ci ، همینطور جدول مربوط رها هم در قسمت Operations (اگه اشتباه نکنم) بگذاری روی utf8_persian_ci و مطمئن بشی جداول هم همین collation را دارند ! اینجوری مشکل باید حل بشه.

البته فکر کنم با استفاده از collate و binary هم بتونی مشکل را حل کنی ! ولی وقتی شما داری Utf-8 با utf8_persian_ci کار میکنی چرا باید collation چیز دیگه ای باشه !؟ در ضمن در زمان اتصال به musql هم میتونی با


SET NAMES 'UTF-8' COLLATE 'utf8_persian_ci'

از استفاده charset و collation صحیح مطمئن بشی.

skysings
پنج شنبه 25 آبان 1391, 21:11 عصر
با تشکر از جوابتون
من راهنمایی شما رو امتحان کردم اما جواب نداد ولی یه کد دیگه پیدا کردم که مشکلو حل کرد. اینو باید درست بعد از وصل شدن به mysql و انتخاب دیتابیس نوشت:

mysql_query("SET NAMES 'utf8' ");
و یا

mysql_query ('SET NAMES UTF8');
امیدوارم اگه کسی مشکل منو داشت مثل من حل بشه