✍️ المقدمة:
في أحد المشاريع التي قمت بترحيلها من استضافة محلية إلى سيرفر VPS، واجهت مشكلة مفاجئة جعلت البيانات تظهر بأحرف غير مفهومة (����) خصوصًا النصوص العربية.
في هذا المقال سأشارك تجربتي الكاملة:
من أين جاءت المشكلة، وكيف قمت بحلها خطوة بخطوة باستخدام Laravel وMySQL، بالإضافة إلى نصائح مهمة لتجنب هذا النوع من الأخطاء مستقبلًا.
💡 كيف بدأت المشكلة؟
كل شيء كان يعمل بشكل ممتاز محليًا (localhost)، وبعد الترحيل إلى سيرفر حقيقي فوجئت بما يلي:
-
تظهر الحروف العربية بشكل مشوه (رموز غريبة)
-
عمليات البحث في قاعدة البيانات لا تعمل مع النصوص
-
الحروف داخل الجداول تظهر كـ
????
🔍 التشخيص: ما السبب الحقيقي؟
المشكلة لم تكن في Laravel، ولا في الكود، وإنما في ترميز قاعدة البيانات بعد الترحيل.
الترميز في الاستضافة الجديدة كان:
latin1_swedish_ci
بينما في مشروعي الأصلي كان:
utf8mb4_unicode_ci
وهنا بدأ الخلل.
🛠️ الحل خطوة بخطوة:
1. التأكد من ترميز قاعدة البيانات
نفذت هذا الأمر داخل MySQL:
SHOW CREATE TABLE users;
وكانت النتيجة تشير إلى الترميز القديم (latin1
)، وهذا سبب ظهور الرموز الغريبة.
2. تعديل الترميز يدوياً
فتحت قاعدة البيانات من خلال phpMyAdmin أو من سطر الأوامر، ثم نفذت:
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
كررت هذا الأمر مع الجداول الأخرى.
3. تعديل إعدادات Laravel
في ملف .env
الخاص بـ Laravel، تأكدت أن إعدادات الاتصال بقاعدة البيانات تستخدم الترميز الصحيح:
DB_CONNECTION=mysql
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
4. إعادة ترحيل البيانات مع الحفاظ على الترميز
في بعض الحالات، اضطررت لإعادة تصدير الجداول بصيغة SQL باستخدام UTF-8، مع تفعيل خيار:
-
✅ "SET NAMES utf8mb4" قبل التصدير
-
✅ "Encoding: UTF-8" أثناء الاستيراد
✅ النتيجة:
تمت استعادة جميع الحروف العربية بنجاح، وبدأت عمليات البحث تعمل بشكل طبيعي دون أي رموز غريبة.
🧠 نصائح لتجنب المشكلة مستقبلاً:
- دائمًا صدّر قاعدة البيانات بترميز
UTF-8
من البداية. - حدد الترميز في ملف
.env
قبل أي عمليةmigration
.
تأكد من إعدادات MySQL على السيرفر الجديد:
1. character_set_server = utf8mb4
-
استخدم أدوات مثل Adminer أو DBeaver لمراقبة الترميز بعد النقل.
🧾 الخلاصة:
هذه المشكلة تحدث كثيرًا أثناء ترحيل المشاريع، خصوصًا لمن يتعامل مع اللغة العربية أو Unicode بشكل عام.
قد تبدو بسيطة، لكنها تؤثر على تجربة المستخدم بشكل مباشر وتُربك المطورين الجدد.
💬 هل واجهت مشكلة مشابهة أثناء ترحيل مشروعك؟
شاركها معي في التعليقات، وسأقوم بتغطيتها في مقال مخصص.