PDA

View Full Version : فوری فوری :مشکل در ذخیره اطلاعات خوانده شده از جدول MS Access در جدول MySql به دلیل Encoding



computer-mag
جمعه 03 شهریور 1391, 18:36 عصر
با سلام و خسته نباشید
من یک فایل اکسس با فرمت .mdb دارم که اطلاعات یکی از جداول اونو میخام بخونم و در جدول MySql ذخیره کنم.
البته این کارو انجام دادم و اطلاعات خوانده و ذخیره میشه ولی دوتا مشکل هست:

1.دیتاهایی که با فرمت متن در Ms Access هستن روی صفحه مرورگر چاپ میشن ولی به صورت انکود شده که وقتی انکودینگ رو روی Arabic(Windows-1256) میزارم فارسی و درست نشون داده میشن ولی توی MySql در فیلد مورد نظرشون ذخیره نمیشن و فقط قسمت عددی اگه توی اون متن باشه ذخیره میشه.

2. دیتاهایی که عدد هستن مثلا فیلدی که برابر با 190 هست در MS Access وقتی در جدول MySql ذخیره میشن به این شکل در میاد 190.0 و این 0 به آخرشون اضافه میشه.


*تمامی فیلدهای MySql رو از نوع TEXT گرفتم
*ظاهرا Encoding فایل اکسس Arabic(Windows-1256) هست
*من می خام در MySql تمامی دیتا ها با انکودینگutf8_persian_ci ذخیره بشن

از دوستان میخوام راهنمایی کنید که مشکل من در کجاس ه البته تا اونجا که خودم فهمیدم در Encoding هست و اینکه چجوری می تونم رفعش کنم
مشکل خیلی حاد و جدی هست و پروژه رو باید سریعا تحویل بدم:گریه:

computer-mag
شنبه 04 شهریور 1391, 11:53 صبح
کسی بعد از این همه بازدید واقعا نمیتونه کمکی به من بکنه یعنی؟

computer-mag
یک شنبه 05 شهریور 1391, 18:23 عصر
دوستان مشکل رو خودم حل کردم راه حلشم هم اینه اگه یه روزی کسی این مشکل رو داشت بتونه حلش کنه یه تابع باید بنویسید که انکودینگ رو تبدیل کنه که میتونید از یه مدل به مدل دیگه به راحتی تبدیل کنید

function convert_charset($item)
{
if ($unserialize = unserialize($item))
{
foreach ($unserialize as $key => $value)
{
$unserialize[$key] = @iconv('windows-1256', 'UTF-8', $value);
}
$serialize = serialize($unserialize);
return $serialize;
}
else
{
return @iconv('windows-1256', 'UTF-8', $item);
}
} //end of covert charset

Unique
یک شنبه 05 شهریور 1391, 18:39 عصر
کاری که شما میخواین انجام بدین خیلی راحته ! اگه تبدیل را با mysql انجام میدین و encoding روی windows-1256 هست باید با استفاده از تابع زیر اونها را به Utf-8 تبدیل کتید :

iconv('windows-1256', 'UTF-8', $value);
و بعدش بریزین توی جدول های mysql که utf-8 هست با collation متناسب هستند البته ! برای اطمینان بدون عوض کردن encoding صفحه و گذاشتنش روی utf-8 و استفاده از تابع بالا مطمئن بشین تغییر به درستی انجام میشه !

computer-mag
یک شنبه 05 شهریور 1391, 21:47 عصر
کاری که شما میخواین انجام بدین خیلی راحته ! اگه تبدیل را با mysql انجام میدین و encoding روی windows-1256 هست باید با استفاده از تابع زیر اونها را به Utf-8 تبدیل کتید :

iconv('windows-1256', 'UTF-8', $value);
و بعدش بریزین توی جدول های mysql که utf-8 هست با collation متناسب هستند البته ! برای اطمینان بدون عوض کردن encoding صفحه و گذاشتنش روی utf-8 و استفاده از تابع بالا مطمئن بشین تغییر به درستی انجام میشه !

مرسی از راهنماییتون بله ازه مین روشه و در پست بالای پاسختون تونستم این مشکل رو حل کنم بسیار ممنوم

salione
سه شنبه 23 آبان 1391, 08:22 صبح
سلام دوست عزيز
منم همين مشكلو دارم اما تابع بالا جواب نميده

چيكار كنم؟

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
$conn = odbc_connect('light','','');

if(!$conn)
exit("ODBC Connection Failed: " . odbc_error());
$sql = "SELECT * FROM light";
$rs = odbc_exec($conn, $sql);

if(!$rs)
exit("Error in SQL");
echo "<table><tr>";
echo "<th>LightType</th>";
echo "<th>Watt</th></tr>";


//----- MySQL Connect
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'Dest';
$connect = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
mysql_query("SET NAMES 'utf8'", $connect);
mysql_select_db($dbname);
mysql_set_charset("utf8",$connect);
//------------------------
$i = 0;
while(odbc_fetch_row($rs)){

$compname=odbc_result($rs,"LightType");
$conname=odbc_result($rs,"Watt");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
// Insert in to Light Table (MySQL)
$sql="INSERT INTO `Dest`.`light` (`LightType`, `Watt`) VALUES ('$compname', '$conname')";
$rest = mysql_query($sql);
if($rest) $i++; else print "Error in Insert SQL Query ...";
}// End of While
print $i." Records Inserted Successfuly ...<hr>";

echo "</table>";



odbc_close($conn);
?>
</body>
</html>