سلام دوستان.من چند تا مشکل در مورد فارسی نویسی در mysql دارم که مطرح میکنم .خوشحال میشم نظرتونو بشنوم.
با اینکه characterset رو توی mysql برابرutf8 گذاشتم و collation رو هم روی utf8_persian_ci تنظیم کردم،باز هم وقتی فارسی وارد database می شد به شکل اجق وجق دیده میشد.
واسه رفع این مشکل توی کد php که وظیفه insert کردن اطلاعات رو توی database داشت این سه خط کد رو اضافه کردم:
1-فارسی نوشتن فقط تو جدول هایی که توسط فرم insert میشن ،درست شد.اگر بخوام اطلاعات رو مستقیما توی database وارد کنم تکلیف این اجاویق چیه.
2-حالا توی همون کد php که گفتم ،بعد از وارد کردن اطلاعات ،میخوام برای update کردن اون فیلدها رو بازیابی کنم و توی شرط(where) یکی از همون فیلد هایی که با utf8، انکد شده رو میذارم نمیتونه پیداش کنه .ولی اگه اون سه خط کد بالا رو که بر دارم درست کار میکنه.
در اینجا متغییر $u_name که حاوی فیلد user_name هست و در فرم وارد شه و بعد از encode شدن در database ذخیره شده ،در$SQL2 که شامل دستور update هستش ،تشخیص داده نمیشه و تو databse پیداش نمیکنه.
واسه اینکه بهتر منظورم رو برسونم کد php رو میذارم تا ببینید:
با اینکه characterset رو توی mysql برابرutf8 گذاشتم و collation رو هم روی utf8_persian_ci تنظیم کردم،باز هم وقتی فارسی وارد database می شد به شکل اجق وجق دیده میشد.
واسه رفع این مشکل توی کد php که وظیفه insert کردن اطلاعات رو توی database داشت این سه خط کد رو اضافه کردم:
کد:
mysql_query("SET CHARACTER SET utf8;");
کد:
[LEFT] // mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'");
// mysql_query("SET CHARACTER SET utf8;",$connection1);[/LEFT]
با این کار اطلاعات فارسی به درستی توی database ذخیره شدن اما دو مشکل باقیه:
1-فارسی نوشتن فقط تو جدول هایی که توسط فرم insert میشن ،درست شد.اگر بخوام اطلاعات رو مستقیما توی database وارد کنم تکلیف این اجاویق چیه.
2-حالا توی همون کد php که گفتم ،بعد از وارد کردن اطلاعات ،میخوام برای update کردن اون فیلدها رو بازیابی کنم و توی شرط(where) یکی از همون فیلد هایی که با utf8، انکد شده رو میذارم نمیتونه پیداش کنه .ولی اگه اون سه خط کد بالا رو که بر دارم درست کار میکنه.
در اینجا متغییر $u_name که حاوی فیلد user_name هست و در فرم وارد شه و بعد از encode شدن در database ذخیره شده ،در$SQL2 که شامل دستور update هستش ،تشخیص داده نمیشه و تو databse پیداش نمیکنه.
واسه اینکه بهتر منظورم رو برسونم کد php رو میذارم تا ببینید:
کد:
$password = "";
$hostname = "localhost";
$dbase ="engeen";
$u_name=$_POST["name"];
$u_famil=$_POST["famil"];
$u_id=$_POST["id"];
$u_code=$_POST["code"];
$u_phon=$_POST["phon"];
$u_address=$_POST["address"];
$connection1 = mysql_connect($hostname, $username, $password);
if(!$connection1)
die("<b>ERROR:</b> " . mysql_error());
else
{
$dbconnect=mysql_select_db($dbase, $connection1); //Select the database.
// mysql_query("SET CHARACTER SET utf8;");
// mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'");
// mysql_query("SET CHARACTER SET utf8;",$connection1);
if (!$dbconnect)
die("<b>can not fount database:</b> " . mysql_error()); //Receive an error if it cannot connect.
}
$sql = "INSERT into users(user_name, user_famil,user_identity ,user_code,user_phon,user_address)
VALUES('$u_name','$u_famil','$u_id','$u_code','$u_phon','$u_address')";
$result = mysql_query($sql,$connection1);
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
mysql_close($connection1);
//****************************************************
$j=0;
if(isset($_POST['Submit']))
{
if(isset($_POST['perm']))
{
$sql2="UPDATE users SET ";
for ($i=0; $i<count($_POST['perm']);$i++)
{
$num[$j]= $_POST['perm'][$i];
$j++;
}
}
for ($i=0; $i<$j;$i++)
{
if ($i==0)
$sql2.=' perm'.$num[$i].'=1 ';
else
$sql2.=', perm'.$num[$i].'=1 ';
}
$sql2.=' where user_name ="'.$u_name.'"';
//echo $sql2;
$connection2 = mysql_connect($hostname, $username, $password);
if(!$connection2)
die("<b>ERROR:</b> " . mysql_error());
else
{
$dbconnect=mysql_select_db($dbase, $connection2); //Select the database.
if (!$dbconnect)
die("<b>can not fount database:</b> " . mysql_error()); //Receive an error if it cannot connect.
}
$result = mysql_query($sql2,$connection2);
echo $sql2;
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
آخرین ویرایش: