سؤال

لقد كنت أستمع إلى هذه المشكلة لبضع ساعات بالأمس:

لدي قاعدة بيانات على خادم MySQL 4.1.22 مع ضبط التشفير على "UTF-8 Unicode (utf8)" (كما ورد في تقرير phpMyAdmin).تحتوي الجداول الموجودة في قاعدة البيانات هذه على مجموعة أحرف افتراضية latin2.لكن تطبيق الويب (CMS Made Simple المكتوب بلغة PHP) يعرض الصفحات فيه utf8...

مهما كان هذا الأمر خاطئًا، فهو يعمل بالفعل.يعرض تطبيق الويب الأحرف بشكل صحيح (يتم استخدام معظمها باللغة التشيكية والبولندية).

انا اجري:"mysqldump -u xxx -p -h yyy dbname > dump.sql".هذا يعطيني برنامج نصي SQL الذي:

  • يبدو مثاليًا في أي محرر (مثل Notepad+) عند العرض فيه ترميز UTF-8 - يتم عرض كافة الأحرف بشكل صحيح
  • كافة الجداول في البرنامج النصي تم تعيين مجموعة الأحرف الافتراضية عليها latin2
  • لديها "/ *! 40101 أسماء أسماء LATIN2 */؛" خط في البداية (من بين إعدادات أخرى)

الآن، أريد تصدير قاعدة البيانات هذه إلى خادم آخر يعمل على MySQL 5.0.67، مع ضبط تشفير الخادم أيضًا على "UTF-8 Unicode (utf8)".لقد قمت بنسخ تثبيت CMS Made Simple بالكامل، ونسخت البرنامج النصي dump.sql وقمت بتشغيل "mysql -h ddd -u zzz -p dbname < dump.sql".بعد ذلك، يتم خلط جميع الأحرف عند عرض صفحات الويب الخاصة بنظام CMSMS.

حاولت الإعداد:
SET Character_set_client = utf8;
SET Character_set_connection = latin2;

وجميع المجموعات (فقط لتكون آمنة، حتى لو لم يكن لها أي معنى بالنسبة لي):latin2/utf8، latin2/latin2، utf8/utf8، إلخ.- لا يساعد.لا تزال جميع الشخصيات مشوشة، ولكن في بعض الأحيان بطريقة مختلفة :).

لقد حاولت أيضًا استبدال جميع إعدادات latin2 بـ utf8 في البرنامج النصي (تعيين الأسماء ومجموعات الأحرف الافتراضية للجداول).لا شئ.

هل هناك أي خبراء في MySQL هنا يمكنهم أن يشرحوا ببضع كلمات فقط (أنا متأكد من أنها بسيطة بعد كل شيء) كيف تعمل عناصر التشفير بأكملها حقًا؟قرأت 9.1.4.مجموعات أحرف الاتصال والترتيبات ولكن لم أجد شيئًا مفيدًا هناك.

شكرا يا مات

هل كانت مفيدة؟

المحلول 2

قرف...حسنًا، يبدو أنني وجدت الحل.

MySQL ليس الجاني هنا.لقد قمت بإجراء عملية تفريغ وتحميل بسيطة الآن، دون أي تغييرات على البرنامج النصي dump.sql - مما يعني أنني تركت "مجموعة الأسماء اللاتينية 2" ومجموعات أحرف الجداول كما كانت.ثم قمت بتحويل تثبيت CMSMS الأصلي الخاص بي إلى قاعدة البيانات الجديدة و...عملت بشكل صحيح.لذا فإن التشفير في قاعدة البيانات أمر جيد، أو على الأقل يعمل بشكل جيد مع تثبيت CMSMS الذي قمت به لدى موفر الاستضافة القديم (يبدو أن CMSMS يفعل أشياء مضحكة مع ترميز الأحرف).

لجعله يعمل على موفر الاستضافة الجديد الخاص بي، كان علي بالفعل إضافة هذا السطر إلى lib/adodb/drivers/adodb-mysql.inc.php في تثبيت CMSMS:

mysql_query('set names latin2',$this->_connectionID);

هذا حل معدل قليلاً من هذا المشنور.يمكنك العثور على الخط الدقيق هناك أيضًا.لذلك يبدو أن مشكلة تكوين عميل MySQL.

نصائح أخرى

هل حاولت إضافة خيار --default-character-set=name، مثل هذا:

mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql

لقد واجهت هذه المشكلة من قبل وعملت بعد استخدام هذا الخيار.

نأمل أن يساعد!

الحل بالنسبة لي:

اضبط هذا الخيار في ملف php الخاص بك، بعد ذلك mysql_connect (أو بعد mysql_select_db)..

mysql_query("SET NAMES 'utf8'");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top