
في مجلد convert utf-8 to utf8mb4
تنزيل
تجد قالب باسم convert.php
بس تضعه في اي مجلد يكون التشعيل بالمثال
http://localhost/vb/convert.php
http://www./vb/convert.php
انتبه لوجوده بالمجلد المطلوب كمثال
vb
وقبل التطبيق لزم يكون القاعده مفعله علشان يشتغل معك
المحتوي : لـ convert.php
$host = 'localhost';
$username= 'root'; اسم القاعده
$password = '12345'; الرفم السري لقاعده
$database = 'forum'; اسم القاعده لمجلد
فقط وهذا نموذج لتطبيق



حفظ الكود سمه مثلا باسم :
convert.php
الملف
<?php
/**
*
* Step 1 Source: https://stackoverflow.com/questions/6115612/how-to-convert-an-entire-mysql-database-characterset-and-collation-to-utf-8
*
* Step 2 Source: https://gist.github.com/hollodotme/fe24b961680e08473072
*
*/
/**
* Requires php >= 5.5
*
* Use this script to convert utf-8 data in utf-8 mysql tables stored via latin1 connection
* This is a PHP port from: https://gist.github.com/njvack/6113127
*
* @link : http://www.ridesidecar.com/2013/07/30/of-databases-and-character-encodings/
*
* BACKUP YOUR DATABASE BEFORE YOU RUN THIS SCRIPT!
*
* Once the script ran over your databases, change your database connection charset to utf8mb4:
*
* $dsn = 'mysql:host=localhost;port=3306;charset=utf8mb4';
*
* DON'T RUN THIS SCRIPT MORE THAN ONCE!
*
* @author hollodotme
*/
/*
include "engine/config.php";
$host = $config['db']['server'];
$username= $config['db']['username'];
$password = $config['db']['password'];
$database = $config['db']['name'];
*/
$host = 'localhost';
$username= 'root';
$password = '12345';
$database = 'forum';
if (version_compare(phpversion(), '5.4', '<=')) {
die('PHP version must be >= 5.4');
}
if (isset($_GET['step'])) {
if ($_GET['step'] == 1) {
$conn = mysqli_connect($host, $username, $password, $database);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$alter_database_charset_sql = "ALTER DATABASE " . $database . " CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
mysqli_query($conn, $alter_database_charset_sql);
$show_tables_result = mysqli_query($conn, "SHOW TABLES");
$tables = mysqli_fetch_all($show_tables_result);
echo '<pre style="width:500px;height:300px;overflow-y:scroll;border:1px solid #cdcdcd">';
foreach ($tables as $index => $table) {
$alter_table_sql = "ALTER TABLE " . $table[0] . " CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
$alter_table_result = mysqli_query($conn, $alter_table_sql);
var_dump($alter_table_result);
}
echo '</pre>';
// echo '<h1>OK :) Go to <a href="?step=2">Step 2</a></h1>';
}
elseif ($_GET['step'] == 2) {
if (isset($_GET['step']) && $_GET['step'] == 2) {
if (isset($_COOKIE['Converted']) && $_COOKIE['Converted'] == $database) {
die('<h1>Database converted! <p style="color:red">DO NOT RECONVERT IT AGAIN!, <br>that will distroy your database data.</p></h1>');
}
setcookie("Converted", $database, time() + 3600 * 24 * 30);
header('Content-Type: text/html; charset=utf-8');
$dsn = 'mysql:host=localhost;port=3306;charset=latin1';
$user = $username;
$password = $password;
$options = [\PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY, \PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, \PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET latin1",];
$dbManager = new \PDO($dsn, $user, $password, $options);
$databasesToConvert = [$database];
$typesToConvert = ['char', 'varchar', 'tinytext', 'mediumtext', 'text', 'longtext'];
echo '<pre style="width:500px;height:300px;overflow-y:auto">';
foreach ($databasesToConvert as $database) {
echo $database, ":\n";
echo str_repeat('=', strlen($database) + 1), "\n";
$dbManager->exec("USE `{$database}`");
$tablesStatement = $dbManager->query("SHOW TABLES");
while (($table = $tablesStatement->fetchColumn())) {
echo "Table: {$table}:\n";
echo str_repeat('-', strlen($table) + 8), "\n";
$columnsToConvert = [];
$columsStatement = $dbManager->query("DESCRIBE `{$table}`");
while (($tableInfo = $columsStatement->fetch(\PDO::FETCH_ASSOC))) {
$column = $tableInfo['Field'];
echo ' * ' . $column . ': ' . $tableInfo['Type'];
$type = preg_replace("#\(\d+\)#", '', $tableInfo['Type']);
if (in_array($type, $typesToConvert)) {
echo " => must be converted\n";
$columnsToConvert[] = $column;
}
else {
echo " => not relevant\n";
}
}
if (!empty($columnsToConvert)) {
$converts = array_map(
function ($column) {
return "`{$column}` = CONVERT(CAST(CONVERT(`{$column}` USING latin1) AS binary) USING utf8mb4)";
}
, $columnsToConvert );
$query = "UPDATE `{$table}` SET " . join(', ', $converts);
echo "\n", $query, "\n";
$dbManager->exec($query);
}
echo "\n--\n";
}
echo "\n";
}
echo '</pre>';
echo '<h1>Done :)</h1>';
}
}
}
else {
echo '<h1>Convert utf8 to utf8mb4<br><a href="?step=1">Start</a></h1>';
}
?>
وسلامتكم
تم تطويره
<?php/*** Script to convert MySQL database and tables from latin1 to utf8mb4.* It includes better error handling, logging, and PDO usage.*/$host = 'localhost';$username = 'root';$password = '12345';$database = 'forum';// Ensure PHP version is >= 5.5if (version_compare(phpversion(), '5.4', '<=')) {die('PHP version must be >= 5.5');}try {// PDO connection setup$dsn = "mysql:host=$host;dbname=$database;charset=utf8mb4";$pdo = new PDO($dsn, $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"]);echo "Connected to the database successfully!\n";if (isset($_GET['step'])) {if ($_GET['step'] == 1) {// Step 1: Convert Database Charset to utf8mb4$sql = "ALTER DATABASE $database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";$pdo->exec($sql);echo "Database charset changed to utf8mb4.\n";// Convert tables charset$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);foreach ($tables as $table) {$alterTableSql = "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";$pdo->exec($alterTableSql);echo "Table $table charset converted to utf8mb4.\n";}echo '<h1>Step 1 completed. <a href="?step=2">Go to Step 2</a></h1>';} elseif ($_GET['step'] == 2) {// Step 2: Convert columns data to utf8mb4$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);foreach ($tables as $table) {echo "Converting table: $table\n";$columns = $pdo->query("DESCRIBE $table")->fetchAll(PDO::FETCH_ASSOC);$columnsToConvert = [];foreach ($columns as $column) {$type = preg_replace("#\(\d+\)#", '', $column['Type']);if (in_array($type, ['char', 'varchar', 'tinytext', 'mediumtext', 'text', 'longtext'])) {$columnsToConvert[] = $column['Field'];}}if (!empty($columnsToConvert)) {$convertQuery = [];foreach ($columnsToConvert as $col) {$convertQuery[] = "`$col` = CONVERT(CAST(CONVERT(`$col` USING latin1) AS binary) USING utf8mb4)";}$updateQuery = "UPDATE `$table` SET " . implode(', ', $convertQuery);$pdo->exec($updateQuery);echo "Table $table columns converted to utf8mb4.\n";}}echo '<h1>Step 2 completed. Database fully converted to utf8mb4.</h1>';}} else {echo '<h1>Start conversion process</h1><a href="?step=1">Start Step 1</a>';}} catch (PDOException $e) {// Error handlingecho "Database connection failed: " . $e->getMessage();exit;}?>
تعليمات وجربها
بالطبع! إليك الكود الكامل مع التحديثات التي تتعلق بالتحقق من إصدار PHP بحيث يتم التأكد من أن الإصدار هو بين 5.6 و 8.0 (أو يمكن تعديلها بناءً على ما تحتاجه):
php
نسخ
<?php/*** Script to convert MySQL database and tables from latin1 to utf8mb4.* It includes better error handling, logging, and PDO usage.*/$host = 'localhost';$username = 'root';$password = '12345';$database = 'forum';// تحقق من إصدار PHP المناسبif (version_compare(phpversion(), '5.6', '<') || version_compare(phpversion(), '8.0', '>=')) {die('PHP version must be between 5.6 and 8.0');}try {// PDO connection setup$dsn = "mysql:host=$host;dbname=$database;charset=utf8mb4";$pdo = new PDO($dsn, $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"]);echo "Connected to the database successfully!\n";if (isset($_GET['step'])) {if ($_GET['step'] == 1) {// Step 1: Convert Database Charset to utf8mb4$sql = "ALTER DATABASE $database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";$pdo->exec($sql);echo "Database charset changed to utf8mb4.\n";// Convert tables charset$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);foreach ($tables as $table) {$alterTableSql = "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";$pdo->exec($alterTableSql);echo "Table $table charset converted to utf8mb4.\n";}echo '<h1>Step 1 completed. <a href="?step=2">Go to Step 2</a></h1>';} elseif ($_GET['step'] == 2) {// Step 2: Convert columns data to utf8mb4$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);foreach ($tables as $table) {echo "Converting table: $table\n";$columns = $pdo->query("DESCRIBE $table")->fetchAll(PDO::FETCH_ASSOC);$columnsToConvert = [];foreach ($columns as $column) {$type = preg_replace("#\(\d+\)#", '', $column['Type']);if (in_array($type, ['char', 'varchar', 'tinytext', 'mediumtext', 'text', 'longtext'])) {$columnsToConvert[] = $column['Field'];}}if (!empty($columnsToConvert)) {$convertQuery = [];foreach ($columnsToConvert as $col) {$convertQuery[] = "`$col` = CONVERT(CAST(CONVERT(`$col` USING latin1) AS binary) USING utf8mb4)";}$updateQuery = "UPDATE `$table` SET " . implode(', ', $convertQuery);$pdo->exec($updateQuery);echo "Table $table columns converted to utf8mb4.\n";}}echo '<h1>Step 2 completed. Database fully converted to utf8mb4.</h1>';}} else {echo '<h1>Start conversion process</h1><a href="?step=1">Start Step 1</a>';}} catch (PDOException $e) {// Error handlingecho "Database connection failed: " . $e->getMessage();exit;}?>
التعديلات التي تمت:
تحقق من إصدار PHP:
تم تعديل الشيفرة للتحقق من أن إصدار PHP بين 5.6 و 8.0 فقط باستخدام الكود التالي:
php
نسخ
if (version_compare(phpversion(), '5.6', '<') || version_compare(phpversion(), '8.0', '>=')) {die('PHP version must be between 5.6 and 8.0');}
إعداد الاتصال بقاعدة البيانات باستخدام PDO:
يتم استخدام PDO في جميع الأجزاء الخاصة بالاتصال بقاعدة البيانات واستعلاماتها.
الخطوات 1 و 2:
الخطوة 1: تحويل قاعدة البيانات والجداول إلى utf8mb4.
الخطوة 2: تحويل الأعمدة النصية من latin1 إلى utf8mb4.
إدارة الأخطاء:
تم إضافة التعامل مع الأخطاء باستخدام PDOException لتقديم رسائل خطأ مفهومة إذا حدثت مشاكل أثناء الاتصال أو تنفيذ الاستعلامات.
طريقة الاستخدام:
قم بتشغيل السكربت عبر متصفحك، مثلًا: http://yourdomain.com/convert.php?step=1.
انتقل إلى Step 1 لتحويل الترميز الأساسي لقاعدة البيانات والجداول.
بعد اكتمال Step 1، انتقل إلى Step 2 لتحويل الأعمدة النصية داخل الجداول.
ملاحظات:
التأكد من النسخة: يجب التأكد من أن قاعدة البيانات ليست كبيرة جدًا قبل تشغيل السكربت، لأن تحويل البيانات قد يستغرق بعض الوقت.
النسخة الاحتياطية: لا تنسَ أن تأخذ نسخة احتياطية من قاعدة البيانات قبل تطبيق التغييرات.
قالب كشف سمه باي اسم مثلا delete.php
if (empty (mysqli_fetch_array(mysqli_query($conn,"SHOW DATABASES LIKE 'اسم قاعده البيانات'")))){echo 'غير موجود';}else{echo 'موجود';}غير رقم 5 الى اسم القاعده
وسلامتكم




ليست هناك تعليقات: