صفحة 1 من 7 123456 ... الأخيرةالأخيرة
النتائج 1 إلى 15 من 105

الموضوع: الترميز في ( MYSQL )

  1. #1

    الترميز في ( MYSQL )



    بسم الله الرحمن الرحيم

    السلام عليكم ورحمة الله وبركاته

    قبل أن أبدأ في الدخول بموضوع ( مجموعات الترميز للـ MYSQL ) سأذكر بعض النقاط الأساسيه في الترميز بصوره عامه حتى تتضح الصوره الأساسيه التي ظهر من أجلها الترميز.

    الترميز بإختصار هو عباره عن إعطاء رمز لحرف من الحروف أو علامه من العلامات أو رقم من الأرقام.
    على سبيل المثال:
    لو كان لدينا الجمله التاليه:
    aBaD$1
    فنقول مثلاً
    حرف a نرمز له بالرقم 1
    والحرف B نرمز له بالرقم 2
    والحرف D نرمز له بالرقم 3
    والعلامه $ نرمز له بالرقم 4
    والرقم 1 نرمز له بالرقم 5
    فيصبح ترميز الجمله السابقه
    121345

    أكيد سيسأل السائل ويقول: ما الفائده من هذا الترميز للحروف وللأرقام؟
    الجواب بسيط وهو لأن الكمبيوترات لا تعرف إلا الصفر والواحد ( النظام الثنائي ) لذلك نرمز لهذه الحروف بسلسله من الأرقام الثنائيه الصفر والواحد فقط حتى يفهم الكمبيوتر طلبنا بعد ذلك.

    أيضاً سيسأل السائل ويقول: ولكن في مثالنا السابق رمزنا للحروف بأرقام 121345 وأنت ذكرت بأن الكمبيوتر لا يفهم إلا الصفر والواحد؟
    الجواب بسيط وهو أن لكل سلسله ثنائيه من الصفر والواحد(binary) لها مايقابلها بالسلسله العشريه [0-9](decimal) وكذلك السلسله العشريه لها مايقابلها بالسلسله السدس عشريه[0-9][a-f]ـ(hexdeciaml) لذلك إختصاراً لطول الرقم الذي سيكتب بالسلسله الثنائيه كتبناه بالنظام العشري في المثال السابق لكي تسهل علينا قراءة الرمز.

    الان بعد أن عرفنا الغايه التي وضع الترميز لأجلها دعونا نعرف ماهي الحروف التي سنرمز لها وماهي الأشكال والأرقام ..... الخ
    في بداية ظهور الترميز تم عمل جدول يسمى جدول ASCII وهي إختصار لـ (American Standard Code for Information Interchange ) طبعا من الإسم واضح إنه أمريكي وهذا الجدول يشمل لكل مايراد ترميزه في الحاسب في تلك الفتره لذلك لم يكن الإهتمام بكل الحروف ولكن كان الاهتمام بالحروف الانجليزيه فقط وبعض الإشارات المعروفه في ذلك الوقت بحكم إنهم أمريكان طبعاً
    لذلك تم عمل جدول الـ ascii من 128 خانه وكان طول الحرف في هذا الجدول 7 بت لذلك كان عيبه بأنه ليس ملائم لطول البايت الذي يعادل 8 بت وفي نفس الوقت كانت تنقصه بعض رموز النظام وعلامات أخرى لذلك تمت توسعته الى 256 خانه والصوره التاليه تبين جدول الـ ASCII وتشاهدوا فيها كل حرف والرمز الذي أعطي له بالنظام العشري deciaml


    ملاحظات:
    1-البايت الواحد يساوي 8 بت وبمعادله بسيطه نعرف عدد الخانات في البايت وهي : 2^8 = 256 خانه.
    2- الجدول السابق في الصوره تم ترميز الحروف فيه بالنظام العشري لذلك لو تم تحويل كل رقم من هذه الأرقام الى النظام الثنائي ستظهر معك سلسله طويله من أرقام النظام الثنائي.


    بعد تقدم عصر الكمبيوتر أصبح المطورون في شتى أنحاء العالم ينظرون الى تطوير الجدول السابق بنظام يشمل حروف اللغات الأخرى، فتوصلوا لفكرة أن يكون لكل لغه مجموعة ترميز ( مجموعة محارف ) خاصه بها، تتكون هذه المجموعه من جدول سعته 256 خانه ( بايت ) وفي نفس الوقت جدول لقانون لهذه اللغه.
    جدول القانون هو عباره عن قواعد رياضيه توضّح فيها العلاقه بين الحروف والعلامات.
    على سبيل المثال في اللغه الإنجليزيه حرف a الاسمول يساوي حرف A الكابتل وفي اللغه العربيه حرف ( ل المنفصل ) يساوي حرف ( لـ المتصل ) .... الخ من القوانين المتبعه في كل لغه.

    أمثله على أسماء مجموعات ترميز :
    windows-1252 وهو خاص باللغات اللاتينيه ( الانجليزيه + الألمانيه + الأسبانيه + الدنماركيه + النرويجيه + السويديه ).
    windows-1256 وهو خاص باللغة العربيه .
    windows-1255 وهو خاصه باللغه العبرية .

    كل مجموعات الترميز السابقه طول الحرف فيها 8 بت وحيث أن لكل لغه جدول خاص بها فقد كان متعباً للمطورين بالبحث عن إسم الترميز للغه المطلوبه لذلك تم تطوير هذا النظام مره أخرى أيضاً بحيث تكون كل حروف لغات العالم مكتوبه بجدول واحد فقط وهو النظام العالمي المشهور بالـ UNICODE حيث يكون طول الحرف فيه 16 بت يعني لو طبقنا المعادله السابقه وقلنا : 2^16=65536 خانه !! ( وش يعبيها؟!؟ ).
    لذلك أي حرف مكتوب بترميز اليونيكود يساوي حرفين في أي ترميز اخر وهذا هو السبب الرئيسي الذي يزيد من حجم أي صفحه مخزنه بنظام ترميز اليونيكود.

    لن أخوض في التفاصيل التاريخيه أكثر من ذلك ولكن كانت هذه نبذه توضيحيه حتى أستطيع أن أبدأ هذا الموضوع بوضوح.

    لمزيد من التفاصيل التاريخيه أدخل على الروابط التاليه:
    http://tronweb.super-nova.co.jp/characcodehist.html
    http://www.wps.com/projects/codes/
    http://www.terena.nl/library/multili...oml/mlcs5.html

    ندخل بموضوعنا الان

    تم دعم الترميز (مجموعات المحارف) في الإصدارات 4.1 ومافوق من نظام قواعد البيانات المجاني MySQL لذلك القاريء لهذا الموضوع والذي يستخدم إصدارات أقدم من إصدار 4.1 مثل إصدار 4.0 أو إصدار 3.8 فلن يستفيد من هذا الموضوع وعليه الإنصراف فوراً أو البقاء لمعرفة هذه الميزه الجباره في إصدارات 4.1 ومافوق

    ساستخدم مصطلحين في حديثي:
    الأول charset ويقصد به الترميز المستخدم.
    الثاني collation ويقصد به القانون المستخدم للترميز كما أشرنا لذلك سابقاً.

    لإظهار مجموعات الترميز المستخدمه في إصدار الـ mysql الخاص بك قم بتنفيذ الأمر التالي في الـ phpMyAdmin أو أي سكربت اتصال بالـ mysql:
    كود HTML:
    show character set;
    سيظهر لك جدول يوضح إسم كل مجموعة ترميز مع الوصف والقانون الإفتراضي المستخدم لهذا الترميز وطول الحرف الواحد.
    كود HTML:
    +----------+-----------------------------+---------------------+--------+
    | Charset  | Description                 | Default collation   | Maxlen |
    +----------+-----------------------------+---------------------+--------+
    | big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
    | dec8     | DEC West European           | dec8_swedish_ci     |      1 |
    | cp850    | DOS West European           | cp850_general_ci    |      1 |
    | hp8      | HP West European            | hp8_english_ci      |      1 |
    | koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
    | latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
    | latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
    | swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
    | ascii    | US ASCII                    | ascii_general_ci    |      1 |
    | ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
    | sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
    | hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
    | tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
    | euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
    | koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
    | gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
    | greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
    | cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
    | gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
    | latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
    | armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
    | utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
    | ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
    | cp866    | DOS Russian                 | cp866_general_ci    |      1 |
    | keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
    | macce    | Mac Central European        | macce_general_ci    |      1 |
    | macroman | Mac West European           | macroman_general_ci |      1 |
    | cp852    | DOS Central European        | cp852_general_ci    |      1 |
    | latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
    | cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
    | cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
    | cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
    | binary   | Binary pseudo charset       | binary              |      1 |
    | geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
    | cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
    +----------+-----------------------------+---------------------+--------+
    تم وضع شروط أساسيه لهذه المجموعات:
    1- لا يمكن لمجموعتي ترميز مختلفه إستخدام قانون واحد.
    2- لكل مجموعة ترميز قانون إفتراضي يتم إختياره في حالة لم يحدد هذا القانون.
    3- تم عمل تقليد لأسماء القوانين بحيث يبدأ الإسم بإسم مجموعة الترميز متبوعاً بإسم اللغه المربوطه بهذه المجموعه وينتهي بهذا الإسم بمايلي:
    _ci وتعني (case insensitive) أي بمعنى تجاهل تحسس حالة الأحرف بحيث يكون حرف a الأسمول يساوي حرف الـ A الكابتل.
    _cs وتعني (case sensitive) أي بمعنى تطبيق تحسس حالة الأحرف وهي عكس السابقه ci .
    _bin وتعني (binary) وتعني أخذ الرمز بدلاً من الحرف وهذا القانون يفيد في حالة التحويل وسنتطرق لإستخدامه فيما بعد.

    السؤال المهم هنا:
    هل يوجد لكل مجموعة ترميز، أكثر من قانون ؟
    الجواب نعم.

    نفذ الأمر التالي:
    كود HTML:
    SHOW COLLATION LIKE 'latin1%';
    سيظهر لك الجدول التالي:
    كود HTML:
    +---------------------+---------+----+---------+----------+---------+
    | Collation           | Charset | Id | Default | Compiled | Sortlen |
    +---------------------+---------+----+---------+----------+---------+
    | latin1_german1_ci   | latin1  |  5 |         |          |       0 |
    | latin1_swedish_ci   | latin1  |  8 | Yes     | Yes      |       1 |
    | latin1_danish_ci    | latin1  | 15 |         |          |       0 |
    | latin1_german2_ci   | latin1  | 31 |         | Yes      |       2 |
    | latin1_bin          | latin1  | 47 |         | Yes      |       1 |
    | latin1_general_ci   | latin1  | 48 |         |          |       0 |
    | latin1_general_cs   | latin1  | 49 |         |          |       0 |
    | latin1_spanish_ci   | latin1  | 94 |         |          |       0 |
    +---------------------+---------+----+---------+----------+---------+
    ستلاحظ أنه عند إختيارك لترميز latin1 في قاعدة بياناتك يجب أن تحدد القانون المستخدم فيها، لأن هناك أكثر من لغه لاتينيه في هذا الترميز لها قانون فإذا لم تحدد القانون فيها فسوف يتم إختيار القانون الإفتراضي لهذا الترميز وهو latin1_swedish_ci .
    ترميز الـ latin1 في الـ mysql هو نفسه ترميز windows-1252 الذي ذكرناه سابقاً.



    يتبع....







  2. #2


    الترميز الذي يهمنا في الموضوع هو ترميز اللغه العربيه cp1256 وهو نفسه ترميز windows-1256 الذي ذكرناه سابقاً وبه قانونين يمكن تطبيقها وهي:
    1- القانون الإفتراضي cp1256_general_ci .
    2- القانون الثنائي cp1256_bin .

    لذلك حتى نفهم كيف نطبق هذا الترميز مع قانونه الإفتراضي على قواعد البيانات الخاصه بنا يجب معرفة الطبقات الترميزيه في الـ mysql

    1- الطبقات الداخليه ( داخل الخادم ) :
    الطبقه الأولى : ترميز وقانون الخادم( server charset and collation )
    الطبقه الثانيه : ترميز وقانون قاعدة البيانات ( database charset and collation )
    الطبقه الثالثه : ترميز وقانون الجدول ( table character set and collation )
    الطبقه الرابعه : ترميز وقانون الحقل ( column character set and collation )

    2- الطبقات الخارجيه ( اتصال العميل بالخادم ) :
    الطبقه الأولى: ترميز وقانون الإتصال ( connection character set and collation).
    الطبقه الثانيه: ترميز وقانون العميل ( client character set and collation ).
    الطبقه الثالثه: ترميز وقانون النتائج ( result character set and collation)

    كل هذه الطبقات يتم تطبيقها من الطبقه العليا الى الطبقه السفلى.

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

    لنبدأ بإنشاء قاعدة بيانات ذات ترميز اللغه العربيه cp1256
    نفذ الأمر التالي في الـ phpMyAdmin أو أي سكربت اتصال بالـ mysql :
    كود HTML:
    CREATE DATABASE arabic_db CHARACTER SET cp1256;
    سوف يقوم الخادم بإنشاء قاعدة بيانات إسمها arabic_db بترميز cp1256 ولأننا لم نحدد القانون المستخدم فسوف يستخدم القانون الإفتراضي لترميز اللغه العربيه وهو cp1256_general_ci .

    نقوم بإنشاء جدول بترميز اللغه العربيه cp1256
    نفذ الأمر التالي:
    كود HTML:
    CREATE TABLE al3ndaleeb
    (
        f1 CHAR(10) 
    ) DEFAULT CHARACTER SET cp1256;
    قمنا بإنشاء جدول بترميز cp1256 ووضعنا فيه حقل إسمه f1 ولأننا لم نحدد ترميز لغة الحقل فسوف يستخدم ترميز الجدول كما أشرنا لهذا في الطبقات وأيضاً لأننا لم نحدد القانون في الجمله فسوف يستخدم القانون الإفتراضي لترميز اللغه العربيه وهو cp1256_general_ci .

    السؤال المهم هنا:
    هل نستطيع أن نقوم بإنشاء جدول ذو حقول ذات تراميز مختلفه ؟
    الجواب نعم
    وهذه ميزه جباره في طريقة تخزين البيانات داخل الجداول .

    الان أصبحت طبقات الترميز الداخليه في مثالنا كالتالي:
    1- ترميز الخادم ( الترميز الإفتراضي latin1 )
    2- ترميز القاعده ( الترميز العربي cp1256 )
    3- ترميز الجدول ( الترميز العربي cp1256 )
    4- ترميز الحقل ( لم يحدد )

    لماذا ظهر ترميز latin1 في الخادم؟
    الجواب: لأن الخادم إفتراضياً يستخدم هذا الترميز إلا إذا قام المدير العام للخادم ( المستضيف ) بوضع الترميز العربي إفتراضياً للخادم وهذا هو المفروض الذي يقوم به أي مستضيف خدمه ( حسره على المستضيفين العرب تاركين كل شي على الوضع الإفتراضي ) .
    ماذا يعني ؟ هل ستصبح نتائجنا كلها بالـ latin1 ؟؟
    الجواب : بالطبع لا فسوف نستطيع تغيير قيمة ترميز الخادم عند الإتصال!!!
    كيف ؟
    الطريقه سهله وهو في كل إتصال نرسل الأمر التالي للخادم:
    كود HTML:
    set character_set_server='cp1256';
    سؤال مهم:
    كيف نعدل ترميز الطبقات الخارجيه ؟
    عن طريق الأمر التالي:
    كود HTML:
    set names cp1256;
    وسوف يقوم الأمر بوضع الترميز العربي لكل الطبقات الخارجيه لذلك عند الإتصال بالقاعده من أي سكربت يجب إرسال الأمرين السابقه مع بعض.
    كود HTML:
    set character_set_server='cp1256';
    set names cp1256;
    بإذن الله سأدرج موضوع اخر عن طريقة تحويل قواعد البيانات الى ترميز اللغه العربيه وماهي الفائده المهمه من هذا التحويل.

    وأي سؤال في هذا الموضوع أنا حاضر.






  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    May 2006
    المشاركات
    451


    جزاك الله كل خير العندليب ..
    و الله اديتنى أمل انى أفهم SQL ..





    __________________
    Egyp6.Com
    Support@Egyp6.Com
    -------------
    web Hosting - Domain Names - Vps - Online Supporting
    لا تغرنك الحيـاه و زينتها .. .. .. .. فكل الذى فوق التراب تــرابُ

  4. #4
    عضو فعال
    تاريخ التسجيل
    Aug 2004
    المشاركات
    1,974


    الله يجزاك خير على هذه المعلومات القيمه.......





    __________________
    انا أريد وأنت تريد والله يفعل مايريد!

  5. #5
    عضو نشيط
    تاريخ التسجيل
    Jan 2005
    المشاركات
    169


    زادك الله علماً وجزاك خيراً على هذا الموضوع المهم

    بالنسبة لي دائماً أستخدم الترميز العربي والـ cp1256_general_ci
    ومن مميزاتها أني أستطيع استعراض محتويات قاعدة البيانات العربية بكل سهولة باستخدام phpMyadmin
    وكذلك أحياناً أقوم بالتعديل على البيانات العربية من داخل phpMyadmin مباشرة بدون مشاكل.

    لكن المشكلة في الشركات المستضيفة والتي عند أي ترقية أو تطوير للـ MySql يقومون بتغيير ترميز كل قواعد البيانات إلى الترميز الإفتراضي latin1_general_ci

    فتظهر محتويات الموقع على شكل علامات استفهام ؟؟؟؟؟؟؟؟؟؟؟؟

    طبعاً الحل أني أقوم بحذف هذا السطر من ملف الإتصال بقاعدة البيانات
    كود PHP:
    mysql_query("set charset cp1256"); 
    وذلك لأن ترميز قاعدة البيانات والجداول أصبح لاتيني بقانون latin1_general_ci

    بالنسبة لترميز السيرفر فيتم تعديله من الملف httpd.conf داخل الأباتشي بتغيير السطر
    كود PHP:
    AddDefaultCharset ISO-8859-
    إلى
    كود PHP:
    AddDefaultCharset windows-1256 
    مميزات استخدام الترميز العربي windows-1256 والـcp1256_general_ci:
    - حجم قاعدة البيانات يكون أقل مايمكن.
    - امكانية استعراض محتويات قاعدة البيانات من خلال phpMyadmin بشكل واضح وبلغة عربية مفهومة، وكذلك إمكانية التعديل على محتويات الجداول من داخل phpMyadmin بسهولة .

    سؤال: هل هناك ميزات أخرى لاستخدام الترميز العربي cp1256_general_ci ؟؟
    سؤال آخر: ماهي الحالات التي أحتاج فيها للتعديل على ترميز الطبقات الخارجية ؟


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

    ** شكراً لك **







  6. #6


    شكرا لمروركم يا أخواني

    وبالنسبه للميزه الأقوى من تحويل القاعده الى ترميز cp1256 مع قانون cp1256_general_ci هو خاصية البحث

    هل سألتم أنفسكم لماذا لايكون البحث دقيق في المنتديات العربيه وفي بعض السكربتات المهمه مثل القران الكريم؟
    السبب هو الترميز يا أخواني

    إفرض إنك أردت البحث عن إسم ( العندليب ) في منتدى او مجله
    سيرسل إسم ( العندليب ) في جملة الإستعلام على شكل الترميز السدس عشري لكل حرف حسب الشكل التالي:
    كود HTML:
    select * from user where username='%C7%E1%DA%E4%CD%E1%ED%C8'
    سيقوم خادم الـ mysql بمعادلة هذه الرموز بما يقابلها بالترميز اللاتيني وبعدها يبدأ البحث في البيانات المخزنه في القاعده بالحروف اللاتينيه وليس بالأرقام وبعدها يبدأ الخلط في النتائج.

    فأحيانا تظهر لك نتيجه لا يوجد فيها أي لفظ لإسم ( العندليب ) وتستغرب لماذا أتى بهذه النتيجه !!

    أيضاً هناك خاصيه في بعض المنتديات مثل الـ vb وهي ( المواضيع المتشابهه ) وأغلب المبرمجين يقولون أنها لا تجدي نفعاً وقاموا بتعطيلها وكانوا لا يدرون من أن السبب هو الترميز داخل قاعدة البيانات والتي تم حلت مشكلتها في إصدارات 4.1 ومافوق من الـ mysql .


    بإذن الله سأوضح هذه المشكله بتفصيل أكثر في موضوع تحويل قاعدة البيانات الى ترميز اللغه العربيه cp1256 .



    الأخ Jayyan
    بالنسبه لمشكلة تحديث الخادم من قبل المستضيف وتغيير ترميز القواعد كلها فهذا غباااااااااااء من المستضيف ويتحمل عاقبتها هو وليس أنت.

    وبالنسبه لملاحظتك التاليه:
    بالنسبة لترميز السيرفر فيتم تعديله من الملف httpd.conf داخل الأباتشي بتغيير السطر
    هذه داخل الـ apache وليس لها علاقه بالـ mysql أهم شي البيانات التي تخرج من خادم الـ mysql تكون ذات ترميز عربي والباقي أمره سهل بحول الله.

    أما بخصوص الكووود التالي :
    mysql_query("set charset cp1256");
    فهذا الكووود يقوم بوضع الترميز العربي cp1256 لمايلي:
    طبقة العميل
    طبقة النتائج
    أما طبقة الإتصال فلا يقوم بأي تعديل عليها.

    وبالنسبه لسؤالك الأول جوابه بأول ردي هذا وهو ميزة البحث الدقيقه.

    أما بالنسبه لسؤالك الثاني
    فأنت ملزم بأن تكون الطبقات الخارجيه كلها ذات ترميز عربي حتى تصبح الاستعلامات المرسله الى الخادم عربيه وكذلك النتائج المستقبله من الخادم عربيه أيضاً.






  7. #7
    عضو فعال جدا
    تاريخ التسجيل
    Oct 2003
    المشاركات
    2,775


    واااو
    اول مرة اقرا موضوع نفس هذا
    مادري شو صار فيني
    صراحة قريته كاامل
    ماعندي تعليق << مب قدها

    بس ارجوك تااابع
    و الله يعطيك العافية على كل مجهود في هذا المنتدى
    من اول يوم تواجدت معنا بدت العلوم تنهال علينا بكل صدق
    انت كنز حقيقي بحمدلله
    شكرا لك عزيزي عندل <دلع>
    و بإذن الله نلقاك
    اخوك الغريم






  8. #8
    عضو نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    111


    جزاك الله خيرا استاذنا العندليب والله يعطيك العافية





    __________________
    المهم فيما تراه هو ما تتطلع إليه

    حمل ملفاتك لغاية 5 ميجا مع الاعصار العربي

    نستضيف موقعك على سيرفرات قوية و محمية على اعلى المستويات
    www.3sar.com

  9. #9
    عضو سوبر نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    827


    باستخدام الترميز utf-8 تكون نتائج البحث دائما ادق ، و هذا سبب ظللت اتسائل عنه دائما

    لي سؤال ،

    لدينا سكريبت الترميز المستخدم له هو windows-1256 ، و قاعدة بيانات الترميز فيها هو latin1 .

    فهل ترميز السكريبت يلغي ترميز القاعدة ؟

    لأنه عندما يتم تغيير ترميز السكريبت من نظام windows-1256 إلى ترميز utf-8 طبعا الكلمات الاجنبية تظهر بوضوح ، لكن الكلمات العربية تظهر متشوهة كليا و لا تظهر علامات الاستفهام

    كنت قد بحثت في الموضوع طويلا ، و بالفعل وجدت بعد الحلول لكنا لم تكن مكتملة .....

    مثلا لتحويل قاعدة بيانات ذات الترميز windows-1256 للترميز utf-8 استخدم هذا الكود

    كود:
    ALTER TABLE myTable MODIFY myColumn BINARY(255);
     ALTER TABLE myTable MODIFY myColumn VARCHAR(255) CHARACTER SET utf8
    المشكلة أنه يتم فقدان بعض معلومات قاعدة البيانات حيث اجد أن بعض الحقول تصبح فارغة من دون محتوى في حين ان بعض الحقول تبقى كما كانت و تصبح ظاهرة المحتوى في الموقع .....

    قدمت هذا الطرح باعتبار ان اللغة العربية عليها مسايرة التطورات و عليها الدخول في نظام الترميز العالمي unicode المعرف لدينا ب utf-8 ....

    و طبعا التحدي المطروح هو الانتقال من نظام windows-1256 إلى نظام utf-8 بدون اشكالية و بدون اي ضياع للمعطيات .... فاغلب المواقع لا تستخدم الترميز utf-8 لهذا السبب ....
    قد يكون جواب البعض نحن العرب لنا خصوصياتنا و علينا ان ندعم الترميز windows-1256 لانه خاص بما .... لكن ... لكن .... الكل يتجه للترميز العالمي و علينا نحن ايضا ايجاد صيغة للانتقال و للتحويل من القديم للجديد

    و تحياتي الكبيرة لك اخي العندليب و لي عودة أيضا في الموضع





    __________________
    لا تطمعن في كرم من غرته شهرته ، فقد نسي انه بالأمس نجح بكرم الاخرين
    e107 المعربة www.e107arabic.org
    شبكة الباتشات و السوفتوير www.all-patch.org
    شركة استضافة مغربية www.naja7host.com

  10. #10
    عضو فعال
    تاريخ التسجيل
    Jun 2003
    المشاركات
    1,143


    موضوع من ذهب ، ان أحد إهتماماتي الحالية هي عملية التحويل من windows-1256 الى UTF-8 لأحصل على توافقية أكبر .

    سيساعدني موضوعك هذا - و هذا شأن كل موضوعاتك المفيدة - على أن انتقل بسرعة في عملية التحويل لأنني اصبحت افهم بشكل اكبر ما يجري .


    اشكر لك من كل قلبي هذا الحهد يا عندليب ، و أسأل الله تعالى ان يتقبل هذا العمل منك و يجعله في صالح أعمالك اخي الكريم .





    __________________
    سبحان الله و بحمده سبحان الله العظيم .
    random-x@hotmail.com
    -------------
    بين الفينة و الأخرى ... لماماً أظهر !

  11. #11
    عضو نشيط
    تاريخ التسجيل
    May 2006
    المشاركات
    154


    جزاك الله خير
    على معلوماتك القيمه والتي تستاهل التثبيت





    __________________
    اعضاء روافض وجب عدم التعامل معاهم

    أحمد vip
    الكواسر
    jawad-x
    في بي بورتال
    Professional
    Alshajjar
    صحبتنا
    Ali7
    الجود هوست
    N-DES
    السريع
    boostdomain
    Dezo
    jooood2004

  12. #12
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2003
    المشاركات
    333


    بصراحه مجهود رائع وكبير منك

    وانا من الاشخاص الي استفادت من هذا الموضوع

    جزاك الله كل خير ولا هنت ان شاء الله اخوي العندليب

    تحياتي





    __________________
    لا تقول يارب معي هم كبير لكن قل يا هم معي رب كبيــــــــر

    **أبونايف**

    أيميل
    majrat@msn.com

  13. #13
    عضو فعال جدا
    تاريخ التسجيل
    Feb 2003
    المشاركات
    2,007


    جزاك الله ألف

    وحقيقة ملعومات قيمة

    مع أني مافهمت بعضها بس مصيري أفهمها






  14. #14


    الخير فالكم يا أخواني وأشكركم على المرور
    وأتمنى السؤال في أي نقطه غير واضحه في شرحي فأنا لست بمعلم ولكني أحاول أن أوصل المعلومه.

    الزميل all-patch
    باستخدام الترميز utf-8 تكون نتائج البحث دائما ادق ، و هذا سبب ظللت اتسائل عنه دائما
    ليس حقيقي بأن الدقه في البحث تكون فقط عند استخدام utf-8
    بالإمكان أن يكون البحث دقيق بأي ترميز آخر حسب اللغه التي تستخدمها في موقعك.
    لذلك يجب أن يتوافق ترميز النتائج المرسله من موقعك وترميز النتائج المخزنه في قاعدتك حتى تعطيك دقه في البحث.
    فإذا اختلف الإثنان أصبح هناك خلط بين القوانين.

    لدينا سكريبت الترميز المستخدم له هو windows-1256 ، و قاعدة بيانات الترميز فيها هو latin1 .

    فهل ترميز السكريبت يلغي ترميز القاعدة ؟
    يجب التركيز على التعامل مع الطبقات حتى تعرف الترميز الخارج من القاعده؟
    سأفترض أنا بسؤالك بأن كل الطبقات الداخليه والخارجيه ذات ترميز latin1 وأن الترميز الذي تريد أن تتعامل به في سكربتك هو windows-1256 فسوف يصبح هناك خلط بين القوانين.
    وقد ذكرت ذلك في اول الموضوع بأن لكل لغه قانون وضربنا مثالاً على ذلك وقلنا في اللغه العربيه حرف ( ل المنفصل ) هو نفسه حرف ( ل المتصل ) ولكن لكل الحرفين قانون فإذا أتى أي حرف خلف حرف ( ل المنفصل ) يصبح شكل حرف ( ل المنفصل ) هو حرف ( ل المتصل ) وهذا قانون معروف لدينا العرب عند الكتابه لذلك تم عمل هذه القوانين المهمه في جدول ووضعها مع الترميز لذلك لكل لغه قانون خاص بها.
    بمثال بسيط إن شاء الله تتضح الصوره :
    هل كلمة ( العندليب ) نفس كلمة ( ال عندليب ) ؟
    هل كلمة ( allpatch ) نفس كلمة ( AllPatch ) ؟
    اترك الإجابه لك

    كنت قد بحثت في الموضوع طويلا ، و بالفعل وجدت بعد الحلول لكنا لم تكن مكتملة .....

    مثلا لتحويل قاعدة بيانات ذات الترميز windows-1256 للترميز utf-8 استخدم هذا الكود


    كود:
    ALTER TABLE myTable MODIFY myColumn BINARY(255);
    ALTER TABLE myTable MODIFY myColumn VARCHAR(255) CHARACTER SET utf8

    المشكلة أنه يتم فقدان بعض معلومات قاعدة البيانات حيث اجد أن بعض الحقول تصبح فارغة من دون محتوى في حين ان بعض الحقول تبقى كما كانت و تصبح ظاهرة المحتوى في الموقع .....
    اول نقطه يجب أن تتضح لديك وهو أن الحروف الانجليزيه موجوده في كل مجموعة ترميز حتى في الترميز العربي.
    نقطه أخرى كيف وصلت بأن الكوود التالي سوف يقوم بتحويل الترميز من windows-1256 الى utf-8 ؟
    إن شاء الله تعالى سأذكر موضوع اخر بخصوص التحويل حتى نفصل الأساسيات بموضوع والتطبيق على مواقعنا بموضوع اخر.
    واشكرك على النقاش والسؤال.

    أنصحكم بزيارة الموقع التالي لمعرفة تفاصيل أكثر عن الـ unicode
    http://unicode.org/






  15. #15
    عضو نشيط
    تاريخ التسجيل
    Apr 2004
    المشاركات
    34


    السلام عليكم

    أولاً شكراً جزيلاً على الموضوع المتميز

    ثانياً لدي تساؤلات حول الترميز windows-1256 وكذلك utf-8

    أيهما أفضل من ناحية التطبيقات على الويب؟

    لماذا لا يمكننا الاعتماد على utf-8 في حين أننا نرى كل التطبيقات يمكنها التعامل مع هذا الترميز بسهولة، مثلاً عند إنشاء pdf بالعربية، عندما يكون هذا الترميز فنجد سهولة في إضافتها، وقس على ذلك في استخدام تطبيقات أخرى؟

    هل صحيح أن الاعتماد utf-8 سيؤدي لمضاعفة حجم القاعدة إلى ثلاث مرات؟

    هل يمكن الاعتماد على الترميز windows-1256 في قبال الترميز utf-8 على الرغم من مشكلة حجم القاعدة؟

    وشكراً جزيلاً.





    __________________
    أستغفر الله العظيم من كل ذنب عظيم
    سبحان الله والحمد لله ولا إله الله والله أكبر





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض