logo

ماي إس كيو إل فارتشار

Varchar في MySQL هو نوع بيانات يستخدم لتخزين النص الذي يمكن أن يصل طوله إلى الحد الأقصى 65535 حرفا . أعمدة varchar الموجودة في الجدول هي من سلسلة ذات طول متغير يمكن أن تحتوي على رقم أو حرف أو كليهما. نوع البيانات هذا قادر على تخزين 255 حرفًا فقط قبل الإصدار 5.0.3، ولكن مع هذا الإصدار والإصدارات الأحدث، يمكنه استيعاب ما يصل إلى 65535 حرفًا. يمكن تخزينه في MySQL كملف 1 بايت أو 2 بايت بادئة الطول بالإضافة إلى الحجم الفعلي.

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

الحد الأقصى لطول VARCHAR في ماي إس كيو إل يخضع للحد الأقصى لحجم الصف وهو 65.535 بايت، والذي تتم مشاركته بين جميع الأعمدة باستثناء أعمدة TEXT/BLOB ومجموعة الأحرف المستخدمة. وهذا يعني أن العمود الإجمالي يجب ألا يزيد عن 65535 بايت.

دعونا نفهم ذلك بمساعدة مثال.

سنقوم بإنشاء جدولين ونطلق عليهما اسم Test1 وTest2. يحتوي كلا الجدولين على عمودين بالاسم T1 وT2. قم بتنفيذ العبارة التالية لإنشاء جدول ' اختبار 1 ':

 CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

أنشأ البيان أعلاه جدولًا بنجاح لأن طول العمود T1 = 32765 زائد 2 بايت وT2 = 32766 زائد 2 بايت يساوي 65535 (32765+2+32766+2). لذا، فإن طول العمود يلبي الحد الأقصى لحجم الصف في varchar، وهو 65535.

ماي إس كيو إل فارتشار

الآن، سوف نرى ما سيحدث إذا كان حجم العمود يتجاوز الحد الأقصى لحجم varchar 65535. قم بتنفيذ العبارة أدناه حيث قمنا بزيادة حجم العمود T1 لإنشاء جدول Test2 :

 CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

بعد تنفيذ البيان أعلاه، ينتج عن MySQL الخطأ. وهذا يعني أن الحد الأقصى لحجم الصف لا يمكن أن يتجاوز 65.535 بايت. على أية حال، إذا زادت، فستفشل العبارة، وسيقوم MySQL بإنشاء خطأ.

ماي إس كيو إل فارتشار

وفي حالة أخرى، لنفترض أننا قمنا بإنشاء جدول اسمه Test3 باستخدام العبارة أدناه:

 CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL ); 

بعد ذلك، قم بإدراج القيم في الجدول باستخدام العبارة أدناه:

 INSERT INTO Test3(Name) VALUES ('Stephen'); 

الآن قم بتنفيذ العبارة أعلاه. MySQL يعطي رسالة الخطأ: البيانات طويلة جدًا بالنسبة للعمود 'الاسم' في الصف 1 . ويوضح الإخراج ذلك بشكل أكثر وضوحا.

ماي إس كيو إل فارتشار

MySQL VARCHAR والمسافات

لا يقوم MySQL بتعبئة مساحة لقيم varchar عند تخزينها. احتفظت MySQL أيضًا بالمسافات الزائدة عند تخزين قيم varchar أو استردادها. يمكننا أن نفهم ذلك من خلال المثال التالي حيث إدراج بيان يضيف القيم في اسم عمود الجدول Test3 :

 INSERT INTO Test3(Name) VALUES ('John '); 

بعد ذلك، قم بتنفيذ عبارة SELECT لاسترداد القيم.

 SELECT Id, Name, length(Name) FROM Test3; 

سيعطي الإخراج التالي حيث قام MySQL بتضمين المسافة الزائدة في حساب الطول لأنه لا يزيد من طول العمود.

معلمة فيرلوج
ماي إس كيو إل فارتشار

ومع ذلك، عندما نحاول إدراج قيمة varchar بمسافات زائدة تجاوزت طول العمود، فسيقوم MySQL بذلك اقتطاع المساحات الزائدة. أيضًا، يصدر MySQL أ تحذير . والمثال التالي يوضح ذلك بشكل أكثر وضوحا:

 INSERT INTO Test3(Name) VALUES ('Peter '); 

يقوم البيان أعلاه بإدراج قيمة طولها ستة في عمود الاسم. لا تزال القيمة مُدرجة في العمود، لكن MySQL تقوم باقتطاع المسافة الزائدة قبل إضافة القيمة. يمكننا التحقق باستخدام الاستعلام أدناه حيث يمكننا رؤية عبارة الإدراج تمت إضافتها بنجاح ولكن مع تحذير يعطي: تم اقتطاع البيانات للعمود 'الاسم' في الصف 1 :

ماي إس كيو إل فارتشار

الفرق بين نوع البيانات Char وVarchar

يتبع كلا من نوعي البيانات char وvarchar حرف ASCII . وهي متشابهة تقريبًا ولكنها تختلف في تخزين البيانات واسترجاعها من قاعدة البيانات. يلخص الجدول التالي الاختلافات الأساسية بين نوع البيانات char وvarchar:

شار فارتشار
انها تقف من الطابع. انها تقف على الطابع المتغير.
يقوم بتخزين القيم ذات الطول الثابت التي نعلنها أثناء إنشاء الجدول. يقوم بتخزين القيم في سلسلة ذات طول متغير ببادئة بطول بايت واحد أو بايتين.
يمكن تعبئة نوع البيانات هذا بمسافة زائدة للحفاظ على الطول المحدد. لا يمكن تعبئة نوع البيانات هذا بأي حرف، بما في ذلك المسافة، عند تخزينها.
لا يمكن أن يحتوي على أكثر من 255 حرفًا. يمكنه استيعاب ما يصل إلى 65535 حرفًا.
وهو يدعم تخصيص الذاكرة الثابتة. وهو يدعم تخصيص الذاكرة الديناميكية.