PDA

View Full Version : انکدینگ اطلاعات در دیتابیس



parsagw
یک شنبه 03 دی 1391, 17:58 عصر
یک مشکلی خوردیم با یک دیتابیس قدیمی
اطلاعات فارسی به این شکل ذخیره شدند
بوستانچی

Storage Engine: Myisam
Collation: utf8_persian_ci

اینارو منتقل کردیم به یه دیتابیس دیگه با این مشخصات
Storage Engine: innodb
Collation: utf8_general_ci


به نظرتون چطوری دیکدش کنم؟

MMSHFE
یک شنبه 03 دی 1391, 20:51 عصر
اینو امتحان کنید:


<?php
$con1 = mysql_connect('localhost', 'root', '', true) or die('Connection error');
$con2 = mysql_connect('localhost', 'root', '', true) or die('Connection error');
mysql_select_db('old', $con1) or die('Database error');
mysql_select_db('new', $con2) or die('Database error');
mysql_query('SET NAMES \'utf8\'', $con2);
$old_data = mysql_query('SELECT * FROM `table`', $con1);
if($old_data && mysql_num_rows($old_data) > 0) {
while($row = mysql_fetch_assoc($old_data)) {
$query = 'INSERT INTO `table` VALUES (';
foreach($row as $field) {
$query .= "'{$field}',";
}
$query = mb_substr($query, 0, -1) . ')';
mysql_query($query, $con2);
}
mysql_free_result($old_data);
}
mysql_close($con2);
mysql_close($con1);
?>

امیدوارم مشکلتون رو برطرف کنه.

parsagw
دوشنبه 04 دی 1391, 11:43 صبح
دستت درد نکنه آقای شفیعی. کار کرد

فقط مسئله ای
من کانکشن رو با pdo ایجاد کردم و چارست رو هم ست کرده بودم مشکلم کجا هست؟

این تابع اتصال کلاس دیتابیسم هست:



function connect($host,$dbname,$user,$password,$charset){
try {

$dsn = "mysql:host=".$host.";dbname=".$dbname.";charset=".$charset;

$opt = array(
// any occurring errors wil be thrown as PDOException
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// an SQL command to execute when connecting
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
);
$pdo = new PDO($dsn, $user, $password, $opt);

$this->pdo = $pdo;
}catch(Exception $e) {
die('<p class="error">Oops, not connected to database!</p>');
}
}

thacker
دوشنبه 04 دی 1391, 12:11 عصر
سلام ...
منم همین مشکل رو دارم ... وقتی میخوام اسم یک کاربر رو به فارسی سرچ کنم ، چون توی دیتابیس بصورت وستانچی ذخیره شده ، هیچی پیدا نمیکنه !!!

MMSHFE
دوشنبه 04 دی 1391, 12:28 عصر
البته فامیلی من شهرکی هست :چشمک:
درمورد جستجو هم وقتی میخواین Search کنید، کوئری 'SET NAMES 'utf8 رو اجرا نکنید. اینطوری موقع جستجو به همون شکل غیر یونیکد توی دیتابیس دنبالش میگرده.

MMSHFE
دوشنبه 04 دی 1391, 12:30 عصر
فقط مسئله ای
من کانکشن رو با pdo ایجاد کردم و چارست رو هم ست کرده بودم مشکلم کجا هست؟
...

فرقی توی منطق قضیه ایجاد نمیشه. فقط چون با PDO کار میکنید، باید دو اتصال PDO برقرار کنید که روی یکی (اونی که میخواین ازش اطلاعات رو بخونید) کوئری 'SET NAMES 'utf8 رو اجرا نمیکنید تا غیر یونیکد بخونه و روی اونی که میخواین ذخیره کنه (توی دیتابیس جدید) کوئری فوق رو اجرا میکنید تا یونیکد ذخیره بشه.