من الموقع: STC تطلق خدمةالتلفزيون التفاعلي المطور (انفجن) وتتيحها خلال شهر رمضان المبارك

 

العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > الويب والويب 2.0 والتجارة الالكترونية
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو فعال
#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 الذي ذكرناه سابقاً.



يتبع....






العندليب is offline   قديم 31-05-2006, 02:38 PM
الرد مع إقتباس
عضو فعال
#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;
بإذن الله سأدرج موضوع اخر عن طريقة تحويل قواعد البيانات الى ترميز اللغه العربيه وماهي الفائده المهمه من هذا التحويل.

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






العندليب is offline   قديم 31-05-2006, 02:40 PM
الرد مع إقتباس
عضو نشيط جدا
#3  

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






__________________
Egyp6.Com
Support@Egyp6.Com
-------------
web Hosting - Domain Names - Vps - Online Supporting
لا تغرنك الحيـاه و زينتها .. .. .. .. فكل الذى فوق التراب تــرابُ
>> Medo Hard << is offline   قديم 31-05-2006, 02:47 PM
الرد مع إقتباس
عضو فعال جدا
#4  

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






__________________
مطلوب مصمم بنرات فلاشيه.
من لديه الخبره فقط يرسل رساله بأعماله الى usef.spam@gmail.com
لن يتم النظر في الرسائل التي لاتحتوي على أعمال
PHP Expert is offline   قديم 31-05-2006, 03:32 PM
الرد مع إقتباس
عضو نشيط
#5  

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

بالنسبة لي دائماً أستخدم الترميز العربي والـ 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 ؟؟
سؤال آخر: ماهي الحالات التي أحتاج فيها للتعديل على ترميز الطبقات الخارجية ؟


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

** شكراً لك **






Jayyan is offline   قديم 31-05-2006, 03:40 PM
الرد مع إقتباس
عضو فعال
#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 لمايلي:
طبقة العميل
طبقة النتائج
أما طبقة الإتصال فلا يقوم بأي تعديل عليها.

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

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






العندليب is offline   قديم 31-05-2006, 04:40 PM
الرد مع إقتباس
عضو فعال جدا
#7  

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

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






الغريم دوت كوم is offline   قديم 01-06-2006, 12:07 AM
الرد مع إقتباس
عضو نشيط
#8  

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






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

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

نستضيف موقعك على سيرفرات قوية و محمية على اعلى المستويات
( رابط ) www.3sar.com 
e3sarcom is offline   قديم 01-06-2006, 02:33 AM
الرد مع إقتباس
عضو سوبر نشيط
#9  

باستخدام الترميز 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 
all-patch is offline   قديم 01-06-2006, 05:03 AM
الرد مع إقتباس
عضو فعال
#10  

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

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


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






__________________
سبحان الله و بحمده سبحان الله العظيم .
random-x@hotmail.com
-------------
بين الفينة و الأخرى ... لماماً أظهر !
random_X is offline   قديم 01-06-2006, 09:27 AM
الرد مع إقتباس
عضو نشيط جدا
#11  

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






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

أحمد vip
الكواسر
jawad-x
في بي بورتال
Professional
Alshajjar
صحبتنا
Ali7
الجود هوست
N-DES
السريع
boostdomain
Dezo
jooood2004
السواط is offline   قديم 01-06-2006, 01:33 PM
الرد مع إقتباس
عضو نشيط جدا
#12  

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

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

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

تحياتي






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

**أبونايف**

أيميل
majrat@msn.com
M@jRaT.CoM is offline   قديم 01-06-2006, 04:28 PM
الرد مع إقتباس
عضو فعال جدا
#13  

جزاك الله ألف

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

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






__________________
( رابط ) قلعة الفوتوشوب 

( رابط دروس فوتوشوب 

fayz is offline   قديم 01-06-2006, 04:52 PM
الرد مع إقتباس
عضو فعال
#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/






العندليب is offline   قديم 01-06-2006, 06:15 PM
الرد مع إقتباس
عضو نشيط
#15  

السلام عليكم

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

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

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

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

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

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

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






__________________
أستغفر الله العظيم من كل ذنب عظيم
سبحان الله والحمد لله ولا إله الله والله أكبر
Hasan is offline   قديم 01-06-2006, 07:27 PM
الرد مع إقتباس
عضو فعال
#16  

السلام عليكم

مشكور اخي العندليب وبارك الله فيك
قد وصلت لنصف الموضوع وتذكرت أيام الـ 1-0 والسلاسل الأخرى الـ8 والـ 16 وغيرها من وجع القلب
بصراحة كنت اكره هذه المادة

مع تحياتي






__________________
_Mudares_

°‿°
N-DES is offline   قديم 01-06-2006, 11:49 PM
الرد مع إقتباس
عضو فعال
#17  

وعليكم السلام

اهلا بالزملاء Hasan و N-DES وشكرا على مروركم

بالنسبه لتساؤلاتكم
إقتباس:
أيهما أفضل من ناحية التطبيقات على الويب؟
دعني أعدل صيغة سؤالك وأقول أيهما أفضل من ناحية التطبيقات على الويب العربي؟

اذا كان موقعك عربي فأكيد زوارك حيكونوا عرب وأكيد حيكون الترميز windows-1256 العربي موجود لدى زوارك في أجهزتهم إلا إذا كان الويندوز لديهم لا يدعم الترميز العربي فحينها سيفيد نظام اليونيكوود بلا شك ولكن عيب ترميز اليونيكود أنه يضاعف حجم البيانات المكتوب به لان الحرف في اليونيكوود يساوي 2 بايت.


إقتباس:
هل صحيح أن الاعتماد utf-8 سيؤدي لمضاعفة حجم القاعدة إلى ثلاث مرات؟
لا ليس صحيح.
الـ utf8 أحد تطويرات ترميز اليونيكوود والحجم فيه نفس الحجم في اليونيكوود والحرف يساوي 2 بايت.

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

إقتباس:
قد وصلت لنصف الموضوع وتذكرت أيام الـ 1-0 والسلاسل الأخرى الـ8 والـ 16 وغيرها من وجع القلب
ليست ذات أهميه كبيره في موضوعنا ولكن كان الهدف التوضيح الأساسي الذي أتى من أجله الترميز والان الحاسبه تغنيك في عملية التحويلات فلست بحاجه الى التطبيقات الرياضيه التي كانت تدرس في المدارس والجامعات

موفقين






العندليب is offline   قديم 02-06-2006, 01:50 AM
الرد مع إقتباس
عضو فعال
#18  

رائع استاذ العندليب ، لله يجعله في ميزان حسناتك . موضوع مفيد للكبير والصغير المبتدئ والخبير

عندي كم إضافة بسيطة جداً لاصحاب السيرفرات اذا ما كان فية مانع ..

طريقة إظهار الترميز في mysql server للخادم والقواعد والعميل والجداول والاتصال

عن طريق Shell تقوم بكتابة الامر

كود PHP:
mysql 
بعد ذالك قم بكتابة الامر
كود PHP:
status 
ستظهر لك النتائج ، مثل التالي

كود PHP:
--------------
Connection id:          106432
Current database
:
Current user:           root@localhost
SSL
:                    Not in use
Current pager:          stdout
Using outfile
:          ''
Using delimiter:        ;
Server version:         4.1.19-standard-log
Protocol version
:       10
Connection
:             Localhost via UNIX socket
Server characterset
:    latin1
Db     characterset
:    latin1
Client characterset
:    latin1
Conn
.  characterset:    latin1
UNIX socket
:            /var/lib/mysql/mysql.sock
Uptime
:                 54 hours 25 min 6 sec
-------------- 

تلاحظ ظهر لك نفس الي ذكرة الاستاذ العندليب
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1

الترميز المستخدم latin1


تستطيع تغيير الترميز في خادم mysql عن طريق إما تنفيذ آوامر في الشل او عن طريق إضافة اسطر خاصة في ملف اعدادات mysql my.cnf

عن طريق التالي

نقوم بتحرير ملف my.cnf
كود PHP:
nano -/etc/my.cnf 
نقوم بإضافة السطر التالي في منقطة [mysqld]
كود PHP:
default-character-set cp1256 
وايضاً نقوم بإضافة السطر التالي
كود PHP:
[client]
default-
character-set cp1256 
ومن ثم حفظ و إعادة تشغيل خادم الماي اسكيو ال
كود PHP:
mysqladmin reload
/etc/init.d/mysql restart 
اتمنى اذا فية اي خطأ الرجاء التصحيح

وشاكر للمبدع دائماً الاستاذ العندليب






__________________
لتواصل

بريد + ماسنجر

admin( @ )tec4serv.com

3rbhost
سابقاً
Tec4Serv is offline   قديم 02-06-2006, 04:24 AM
الرد مع إقتباس
عضو نشيط
#19  

رائع جدا وفقك الله اخي العزيز العندليب

انا كنت متردد من فتره في ترقية ال mysql من اجل الترميز ومشاكل الترميز التي قرات عن مشاكلها كثيرا في الانترنت

اعتقد اني الان لم اعد متخوفا من الترقيه اليس كذا لك اخي العندليب






__________________
( رابط ) الشبكة المكية العربية 

E-mail : admin@amn.com.sa

MSN : msn@amn.com.sa

00966555892239
0096625570599
g999g.com is offline   قديم 02-06-2006, 08:27 AM
الرد مع إقتباس
مشرف قسم تطوير المنتديات
#20  

ممتاز أخي العندليب
جزاكم الله خير الجزاء

عماد






__________________
( رابط ) alkahf.net 
alkahf is offline   قديم 02-06-2006, 02:20 PM
الرد مع إقتباس
عضو نشيط
#21  

أخي العندليب

تسلم على الموضوع المهم ... وحقيقة معلوماتي في هذا االأمر صفر
ولكن تحصل معي مشكلة في موقعي ... دائماً يتوقف وخاصة عندما يكون عليه ضغط زوار
المستضيف شركة اجنبية امريكية (( ( رابط ) www.websitesource.com ))
وعند توقف الموقع اضطر لعمل ريستارت لسيرفر ويعمل
وللمعلومية يوجد لدي اكثر من 7مواقع بعضها بقاعدة بيانات وبعضها مجرد صفحات هتمل وجميعها تتوقف الموقع الرئيسي عبارة عن دليل وهو سكربت وصلة والأخر سكربت مملكة العرب... عند محادثي للمستضيف عبر الشاتنق يذكر بأن السبب في ((MYSQL ))

حاولت اخبره بأن بعض المواقع بدون قاعدة بيانات ولكن يدعون بأن السبب من كود يسبب مشكلة لـ vps وهو نوع الإستضافة لديهم

ممكن تساعدني بارك الله فيك في حل اللغز ... وهذا موقع اجنبي يمكن يفيدك
( رابط ) http://www.webhostingtalk.com/showth...=websitesource






__________________
سبحان الله والحمد لله والله واكبر
greeeb is offline   قديم 02-06-2006, 03:14 PM
الرد مع إقتباس
عضو فعال
#22  

السلام عليكم

واهلا بالزملاء ونورتم الموضوع

الزميل 3rbhost أشكرك على الإضافه الرائعه بخصوص أمر status ولكن لدي تنبيه حول ماذكرته بخصوص الحل التالي:
إقتباس:
تستطيع تغيير الترميز في خادم mysql عن طريق إما تنفيذ آوامر في الشل او عن طريق إضافة اسطر خاصة في ملف اعدادات mysql my.cnf

عن طريق التالي

نقوم بتحرير ملف my.cnf
كود PHP:
nano -/etc/my.cnf 

نقوم بإضافة السطر التالي في منقطة [mysqld]
كود PHP:
default-character-set cp1256 


وايضاً نقوم بإضافة السطر التالي
كود PHP:
[client
default-
character-set cp1256 

ومن ثم حفظ و إعادة تشغيل خادم الماي اسكيو ال


كود PHP:
mysqladmin reload 
/etc/init.d/mysql restart 
أريد أن أنبهك لمسأله مهمه وهو بعد تعديلك السابق سوف تظهر النتائج من القواعد الموجوده مسبقاً بعلامات استفهام ؟؟؟؟؟؟؟؟؟ خاصة للقواعد العربيه المكتوبه بترميز latin1 .

لذلك يجب عليك تحويل كل قاعده لديك الى ترميز cp1256 إذا كانت كل هذه القواعد بترميز يختلف عن ترميز utf8 وترميز ucs2 وتتم بالأوامر التاليه:
كود PHP:
mysqldump --compatible=mysql40 --user=username --password=password --default_character-set=cp1256 --skip-set-charset dbname dump.sql
mysql 
--user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET cp1256;"
mysql --user=username --password=password --default-character-set=cp1256 dbname dump.sql 
أما لو أردت أن تكون قواعد بياناتك باليونيكوود utf8 فيجب عليك تعديل خطواتك التي ذكرتها في تحرير ملف my.cnf وتضع utf8 بدلاً من latin1 وتقم بإعادة تشغيل الخادم وتنفذ الاوامر التاليه على كل قواعدك:
كود PHP:
mysqldump --compatible=mysql40 --user=username --password=password --default_character-set=latin1 --skip-set-charset dbname dump.sql
chgrep latin1 utf8 dump
.sql
mysql 
--user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname dump.sql 
دقق في أسطر الأوامر ستجد أنني قمت بطرح القاعده بعد أن أخذت نسخه احتياطيه منها.


الاستاذ عماد الدين
سعدت بمرورك واهلا بك

الزميل greeeb
المعذره ردك خارج عن الموضوع.
أعرض مشكلتك في موضوع مستقل وإن شاء الله يساعدونك الشباب.


موفقين جميعاً






العندليب is offline   قديم 02-06-2006, 07:32 PM
الرد مع إقتباس
عضو فعال
#23  

يعطيك العافية استاذ العندليب على التنبية حيث يجب علينا اخذه بعين الاعتبار

تحياتي لك






__________________
لتواصل

بريد + ماسنجر

admin( @ )tec4serv.com

3rbhost
سابقاً
Tec4Serv is offline   قديم 02-06-2006, 09:34 PM
الرد مع إقتباس
عضو جديد
#24  

العندليب،،

أولاً، أشكرك على هذا الطرح الرائع و المتميز
ثانياً، اسمح لي أن أطرح عليك مشكلتي
و كلي أمل أن تطرح علي حلاً أو تجيبني جواب شافي

بالنسبة لي.. قمت قبل الإطلاع على أي شيء بموضوع التراميز
بالذهاب إلى لوحة phpMyAdmin و من ثم قمت بتحويل ترميز إحدى القواعد
إلى cp1256_general_ci ثم ترميز أحد الجداول في هذه القاعدة إلى نفس الترميز
ثم قمت بتعديل ترميز ثلاثة حقول من الجدول إلى نفس الترميز و هو cp1256_general_ci
بعد ذلك أصبحت جميع البيانات في هذه الحقول الثلاثة عبارة عن علامات استفهام
فقمت بعد ذلك بإرجاع التراميز إلى ما كانت عليه للحقول و الجدول و القاعدة
و الترميز كان latin1_swedish_ci لكن بدون أن تعود البيانات إلى ما كانت عليه

سؤالي هو.. هل خسرت بياناتي في قاعدة البيانات؟ و هل هناك طريقة لإسترجاعها؟
و سؤالي الثاني.. ما الطريقة لإظهار البيانات العربية في phpMyAdmin؟
حيث أن محاولة تغيير ترميز القاعدة و الجدول و الحقول كانت بناء على رغبتي بإظهار البيانات العربية بالبرنامج


تقبل تحياتي






__________________
موقع النهر
( رابط ) الصفحة الرئيسية  :: ( رابط ) منتديات النهر  :: ( رابط ) دردشة النهر  :: ( رابط ) عذب الكلام  :: ( رابط ) إتصل بنا 
alnhr.com is offline   قديم 03-06-2006, 03:29 AM
الرد مع إقتباس
عضو فعال
#25  

إقتباس:
المشاركة الأصلية بواسطة alnhr.com
العندليب،،

أولاً، أشكرك على هذا الطرح الرائع و المتميز
ثانياً، اسمح لي أن أطرح عليك مشكلتي
و كلي أمل أن تطرح علي حلاً أو تجيبني جواب شافي

بالنسبة لي.. قمت قبل الإطلاع على أي شيء بموضوع التراميز
بالذهاب إلى لوحة phpMyAdmin و من ثم قمت بتحويل ترميز إحدى القواعد
إلى cp1256_general_ci ثم ترميز أحد الجداول في هذه القاعدة إلى نفس الترميز
ثم قمت بتعديل ترميز ثلاثة حقول من الجدول إلى نفس الترميز و هو cp1256_general_ci
بعد ذلك أصبحت جميع البيانات في هذه الحقول الثلاثة عبارة عن علامات استفهام
فقمت بعد ذلك بإرجاع التراميز إلى ما كانت عليه للحقول و الجدول و القاعدة
و الترميز كان latin1_swedish_ci لكن بدون أن تعود البيانات إلى ما كانت عليه

سؤالي هو.. هل خسرت بياناتي في قاعدة البيانات؟ و هل هناك طريقة لإسترجاعها؟
و سؤالي الثاني.. ما الطريقة لإظهار البيانات العربية في phpMyAdmin؟
حيث أن محاولة تغيير ترميز القاعدة و الجدول و الحقول كانت بناء على رغبتي بإظهار البيانات العربية بالبرنامج


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

اهلا بالزميل الكريم
يبدوا أنك كنت مستعجلاً ياعزيزي ولم تكمل الموضوع لنهايته حيث ذكرت بأنني سوف أذكر موضوعا آخر لتحويل ترميز قواعد البيانات.
اولا أحب أن اوضح لك بأن cp1256_general_ci يعتبر قانون للترميز cp1256 فهناك فرق بينا الإثنين.
ثانياً عملية تغيير ترميز القاعده والجدول والحقول عن طريق امر ALTER مباشرة لا يصلح ويفسد عليك البيانات.
أنت بدأت عملية التحويل بطريقه خاطئه وكان عليك السؤال قبل البدء لأنك بالطريقه هذه فقدت بياناتك المخزنه ويجب عليك العوود للنسخه الاحتياطيه.
لكي نحول جدول الى ترميز اخر يجب التركيز على طبقة الحقول وترك مسألة الطبقات الأخرى على جنب.
كما تعلم ياعزيزي الحقول لها أنواع
فأحيانا يأتي حقل نوعه Int وأحيانا date وأحيانا char ..... الخ
الذي يجب علينا التركيز فيه هو الحقول ذات النوع النصي وهي كالتالي:
char
varchar
text
mediumtext
longtext
enum
set
فأول خطوه يجب عملها قبل التحويل هو عمل نسخه احتياطيه ويفضل أن تأخذ الباك أب بصيغة يونيكوود utf8 حتى لا تفقد شيئاً من البيانات إذا كانت لديك حقول متنوعه في الترميز وهذه الخطوه تفيدك في حالة وقعت في أي خطأ لا سمح الله.
ثاني خطوه للتحويل هو تغيير نوع الحقل الى binary حتى تصبح البيانات المخزنه في الحقل ذات صيغة بايت وليست صيغة نص حسب المثال التالي:
كود PHP:
ALTER TABLE `tCHANGE `c1` `c1BINARY10 ); 
في الأمر السابق حولنا نوع الحقل c1 في جدول t الى binary حسب طول الحقل.
بعدها نفذ الامر حسب المثال التالي:
كود PHP:
 ALTER TABLE `tMODIFY `c1char(10CHARACTER SET cp1256
في الأمر السابق أرجعنا نوع الحقل c1 في جدول t الى نوعه الأصلي مع تغيير نظام الترميز الى الترميز العربي cp1256 .

طبعا الطريقه متعبه إذا كنت تريد تحويل ترميز القاعده بأكملها فالطريقه السابقه كانت فقط على مستوى الحقل وان شاء الله في موضوعنا القادم سنتطرق لهذه المسائل.

تحياتي لك






العندليب is offline   قديم 03-06-2006, 11:34 AM
الرد مع إقتباس
الرد على الموضوع


 

أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح



جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 04:11 PM.