logo

أهلا وسهلا بك زائرنا الكريم في PBBoard Community Forum، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .





11-12-2017 02:03 مساءً
معلومات الكاتب ▼
تاريخ الإنضمام : 03-03-2014
رقم العضوية : 5072
المشاركات : 1636
الجنس :
الدعوات : 2
قوة السمعة : 8530
موقعي : زيارة موقعي
PBBoard Version : 3.0.3
هل تستخدم ترميز utf8 في قواعد البيانات الخاصة بك؟ في هذا الموضوع سوف أشرح لماذا يجب عليك التبديل إلى utf8mb4 بدلا من ذلك، وكيفية القيام بذلك.

UTF-8
يمكن أن يمثل ترميز utf-8 كل رمز في مجموعة أحرف Unicode، والتي تتراوح من U + 000000 إلى U + 10FFFF. هذا هو 1،114،112 من الرموز الممكنة. (لم يتم تعيين كل رموز Unicode هذه حتى الآن، ولكن ذلك لا يمنع utf-8 من القدرة على ترميزها.)

utf-8 هو ترميز متغير العرض. يقوم بتشفير كل رمز باستخدام واحد إلى أربعة بايتات 8 بت. يتم ترميز الرموز ذات قيم النقطة الرمزية الأدنى باستخدام عدد أقل من وحدات البايت. وبهذه الطريقة، يتم تحسين utf-8 للحالة الشائعة حيث يتم استخدام أحرف ASCII ورموز BMP الأخرى (التي تتراوح نقاط كودها من U + 000000 إلى U + 00FFFF) - بينما لا تزال تسمح بالرموز النجمي (التي تتراوح نقاطها من U + 010000 إلى U + 10FFFF) ليتم تخزينها.

MySQL’s <code>utf8</code>



لفترة طويلة، كنت أستخدم الترميز utf8 ل قواعد البيانات والجداول والأعمدة، على افتراض أنه بإستخدام الترميز utf8 سأكون قادرا على تخزين أي رمز أريد في قاعدة البيانات الخاصة بي - أو حتى هكذا ظننت.

أثناء الكتابة عن ترميز الأحرف الداخلية لجافا سكريبت، لاحظت أنه لا توجد طريقة لإدراج رمز U + 1D306 تيتراغرام فور سينتر (𝌆) في قاعدة بيانات MySQL. كان العمود الأول يحاول تحديث ترتيب utf8_unicode_ci وتم تعيين مجموعة أحرف الاتصال إلى utf8.

يتبين أن مجموعة الأحرف utf8 الخاصة ب MySQL تطبق جزئيا بشكل صحيح ترميز utf-8 الصحيح. يمكن فقط تخزين رموز ترميز utf-8 التي تتكون من واحد إلى ثلاثة بايت؛ لا يتم دعم الرموز المشفرة التي تستغرق أربعة بايتات.

منذ astral symbols (التي تتراوح بين نقاط رمز من U + 010000 إلى U + 10FFFF) تتكون كل من أربعة بايت في utf-8، لا يمكنك تخزينها باستخدام تطبيق utf8.

هذا لا يؤثر فقط على حرف، <code>𝌆</code> ، ولكن رموز أكثر أهمية مثل U + 01F4A9 كومة من بو (💩) كذلك. في المجموع، هذا هو 1،048،575 نقاط رمز ممكن لا يمكنك استخدامها. في الواقع، يسمح utf8 الخلية فقط لتخزين 5.88٪ ((0x00FFFF + 1) / (0x10FFFF + 1)) من جميع نقاط رمز ونيكود الممكنة. صحيح utf-8 يمكن ترميز 100٪ من جميع نقاط رمز يونيكود.

MySQL’s <code>utf8mb4</code>








لحسن الحظ، MySQL 5.5.3 (صدر في أوائل عام 2010) قدم ترميز جديد يسمى utf8mb4 الذي يخطط ل utf-8 الصحيح، وبالتالي يدعم بشكل كامل يونيكود، بما في ذلك astral symbols.






مترجم من
https://mathiasbynens.be/notes/mysql-utf8mb4


مختصر الكلام
ترميز utf8 في قواعد البيانات MySQL لا يدعم كل الأحرف والرموز على سبيل المثال الصور التعبيرية Emojis .


1. بناء منتدى جديد بترميز UTF8 كاملاً
إذا كنت تعمل منتدى جديد فالأمور بسيطة لك فقط أنشىء قاعدة بيانات بترميز Collation = utf8mb4_unicode_ci
وقم بتحرير الملف

CODE
engine/libs/db.class.php

وابحث عن

CODE
        // mysql_query("set character_set_server='utf8'");

       // mysql_query("set names 'utf8'");


وغيرها ل
CODE


mysql_query("set character_set_server='utf8mb4'");

mysql_query("set names 'utf8mb4'");


وإذا تستعمل MySQli
تحرر الملف
CODE
engine/libs/db_mysqli.class.php

وتغير
CODE
       // mysqli_query("set character_set_server='utf8'");

       // mysqli_query("set names 'utf8'");

إلى

CODE
mysqli_query("set character_set_server='utf8mb4'");

mysqli_query("set names 'utf8mb4'");

مع أني لم اجرب ذلك، المفروض تعمل بلا مشاكل.


2. تحويل قاعدة بيانات من utf8 إلى utf8bm4
يمكنك عمل ذلك يدوياً بتعديل ترميز الحقول التي تريد دعم utf8 كاملا فيها مثلا حقل تغير ترميز حقل text و title في جدول pbb_subject بتغيير ترميزه ل utf8mb4_unicode_ci ... وهكذا

وجدت سكريبت يقوم بذلك ويغير كل الحقول وهو مرفق ولكن يجب أن تكون على خبرة بما تفعل وأن قاعدة بيانات منتداك بترميز utf8-utf8 وليس latin1-utf8.

كيف أعرف ترميز قاعدة بيانات منتداي؟
مبدأياً من ترميز الجداول والحقول في الجداول ولكن لا يمكن الإعتماد على ذلك دائما فقد يكون ترميز الجدول utf8_general_ci ولكن الحروف تخزن بتميز latin1 اليك هذا الطريقة البسيطة إذهب لجدول pbb_subject وانظر للأحرف فيه إذا كانت رموز فترميز الأحرف لديك latin1 ولا يصلح لك هذا الموضوع فتحويل الترميز latin1 إلى utf8mb4 يحتاج لمزيد من العمل ربما مستقبلاً أجد له محول.

إستخدام سكريبت التحويل

من الأفضل عمل نسخة إحتياط من قاعدة البيانات قبل التحويل.

حمل الملف المرفق وحرر الملف conv.php وضع فيه بيانات قاعدة البيانات ثم ارفع الملف لموقعك وقم بزيارته
سيظهر لك

Convert utf8 to utf8mb4
Start


اكبس على Start وسيقوم بالتحويل ثم اعمل التعديلات التي ذكرتها في رقم 1 (بناء منتدى جديد بترميز UTF8 كاملاً)

مبارك عليك دعم الترميز العالمي UTF-8 100% في منتداك وسيمكنك إستعمال رموز Emojis في المواضيع بدل تحولها ل ؟؟؟ سابقاً عندما كان بترميز utf8.
تم تحرير الموضوع بواسطة :kareem بتاريخ:11-12-2017 06:15 مساءً
توقيع :kareem
0

look/images/icons/i1.gif لماذا الترميز utf8mb4 وليس utf8 وإعتماد الترميز UTF8 كاملاً في منتداك
  31-12-2019 12:13 صباحاً   [1]
معلومات الكاتب ▼
تاريخ الإنضمام : 25-11-2019
رقم العضوية : 8776
المشاركات : 31
الدولة : مصر
الجنس :
تاريخ الميلاد : 25-3-1980
قوة السمعة : 0
موقعي : زيارة موقعي
PBBoard Version : غير محدد
عمل رائع استمر

اضافة رد جديد اضافة موضوع جديد




الكلمات الدلالية
لماذا ، الترميز ، utf8mb4 ، وليس ، utf8 ، وإعتماد ، الترميز ، UTF8 ، كاملاً ، منتداك ،









الساعة الآن 04:05 AM