SQLite أنواع البيانات: عدد صحيح، نص، رقمي، حقيقي، ثنائي كبير

⚡ ملخص ذكي

SQLite تختلف أنواع البيانات عن قواعد البيانات الأخرى لأنها SQLite يستخدم النوع الديناميكيpingتخزين أي قيمة في أي عمود. تحدد فئات التخزين، وتقارب الأنواع، وأسماء الأنواع المعلنة معًا كيفية حفظ كل قيمة فعليًا على القرص.

  • 🧩 النوع الديناميكيping: SQLite يتم تحديد نوع البيانات ديناميكيًا، لذا فإن القيمة التي تقوم بإدخالها، وليس تعريف العمود، هي التي تحدد كيفية تخزين البيانات.
  • 🗄️ فئات التخزين: تصف خمس فئات تخزين - NULL و INTEGER و REAL و TEXT و BLOB - كيفية الاحتفاظ بكل قيمة على القرص.
  • 🎯 تقارب النوع: يحصل كل عمود على تقارب موصى به - نص، رقمي، عدد صحيح، حقيقي، أو BLOB - من اسم النوع المعلن عنه.
  • 🔢 تخزين الأرقام: أي نوع معلن يحتوي على INT يصبح INTEGER، بينما REAL و DOUBLE و FLOAT تحمل أرقام الفاصلة العائمة في ثمانية بايتات.
  • 📅 التواريخ والقيم المنطقية: SQLite لا يحتوي على فئة مخصصة للتاريخ أو القيمة المنطقية، ويقوم بتخزين هذه القيم كـ TEXT أو REAL أو INTEGER بدلاً من ذلك.
  • 🤖 مساعدة الذكاء الاصطناعي: يقوم مساعدو الذكاء الاصطناعي لتحويل النصوص إلى SQL و GitHub Copilot بإنشاء SQLite تعريفات الأعمدة واختيار أنواع البيانات من اللغة الإنجليزية البسيطة.

SQLite أنواع البيانات

توضح الأقسام التالية كيفية SQLite يتناول أنواع البيانات، بدءًا من فئات التخزين الخمس، ثم تقارب الأنواع وقواعد تعيينها، وأخيرًا أمثلة عملية لتخزين الأعداد الصحيحة والأعداد الحقيقية وBLOBs والقيم المنطقية والتواريخ.

أنواع البيانات في SQLite تختلف عن تلك الموجودة في أنظمة إدارة قواعد البيانات الأخرى. SQLiteيمكنك تعريف أنواع البيانات بشكل طبيعي، ولكن لا يزال بإمكانك تخزين أي قيمة في أي نوع بيانات.

SQLite هو نظام غير مُصنّف. لا توجد أنواع بيانات ثابتة؛ يمكنك تخزين أي نوع من البيانات تريده في أي عمود. يُسمى هذا النوع الديناميكيping.

في الأنواع الثابتة، كما هو الحال في أنظمة إدارة قواعد البيانات الأخرى، إذا قمت بتعريف عمود بنوع بيانات عدد صحيح، فلا يمكنك إدخال سوى قيم من نوع بيانات عدد صحيح. ومع ذلك، في الأنواع الديناميكية، كما هو الحال في SQLiteيتم تحديد نوع العمود بناءً على القيمة المُدخلة، ثم SQLite يخزن تلك القيمة حسب نوعها.

SQLite فئات التخزين

In SQLite توجد طرق تخزين مختلفة تبعًا لنوع القيمة؛ وتسمى طرق التخزين المختلفة هذه فئات التخزين في SQLite.

فيما يلي فئات التخزين المتوفرة في SQLite:

  • اغية - يتم استخدام فئة التخزين هذه لتخزين أي قيمة فارغة.
  • INTEGER – يتم تخزين أي قيمة عددية كقيمة عددية صحيحة مُوقّعة (يمكنها استيعاب قيم عددية صحيحة موجبة وسالبة). القيم العددية الصحيحة في SQLite يتم تخزينها إما في 1 أو 2 أو 3 أو 4 أو 6 أو 8 بايت من التخزين اعتمادًا على قيمة الرقم.
  • ريال – يتم استخدام فئة التخزين هذه لتخزين قيم الفاصلة العائمة، ويتم تخزينها في 8 بايت من مساحة التخزين.
  • TEXT – يخزن سلاسل نصية. كما يدعم ترميزات مختلفة مثل UTF-8 وUTF-16BE وUTF-16LE.
  • BLOB – تُستخدم لتخزين الملفات الكبيرة، مثل الصور أو الملفات النصية. تُخزن القيمة كمصفوفة بايت، تمامًا مثل قيمة الإدخال.

SQLite نوع التقارب

يُوصى بتخزين نوع البيانات المُحدد في العمود. مع ذلك، يمكنك تخزين أي نوع من البيانات كما تشاء؛ فهذه الأنواع مُوصى بها وليست إلزامية.

تم تقديم هذه الأنواع في SQLite لتحقيق أقصى قدر من التوافق بين SQLite وغيرها نظام إدارة قواعد البياناتs.

أي عمود تم الإعلان عنه في SQLite يتم تحديد نوع البيانات في قاعدة البيانات بناءً على نوع البيانات المُعلن عنه. فيما يلي قائمة بأنواع البيانات في SQLite:

  • نص.
  • رقمي.
  • عدد صحيح.
  • حقا.
  • سائل لزج.

هنا هو كيف SQLite يحدد انتماء العمود من نوع البيانات المعلن عنه:

  • يتم تعيين تقارب INTEGER إذا كان النوع المعلن يحتوي على سلسلة "INT".
  • يتم تعيين خاصية TEXT إذا كان نوع بيانات العمود يحتوي على إحدى السلاسل التالية: "TEXT" أو "CHAR" أو "CLOB". على سبيل المثال، سيتم تعيين خاصية TEXT لنوع البيانات VARCHAR.
  • يتم تعيين تقارب BLOB إذا لم يكن العمود يحتوي على نوع محدد أو كان نوع البيانات هو BLOB.
  • يتم تعيين التقارب الحقيقي إذا كان النوع يحتوي على إحدى السلاسل التالية: "DOUB" أو "REAL" أو "FLOAT".
  • يتم تعيين تقارب NUMERIC لأي نوع بيانات آخر.

يوجد أيضًا جدول أدناه يعرض بعض الأمثلة على الخريطةping ما بين SQLite أنواع البيانات وارتباطاتها التي تحددها هذه القواعد:

خريطةping ما بين SQLite أنواع البيانات المُعلنة وأنواعها المرتبطة بها، مع عرض أمثلة على INT وCHAR وTEXT وBLOB وREAL وFLOAT وNUMERIC

أمثلة على تخزين أنواع البيانات في SQLite

تخزين الأرقام مع SQLite INTEGER

إذا كان أي عمود يحتوي على نوع بيانات يتضمن كلمة "INT"، فسيتم تعيين نوع بياناته إلى نوع INTEGER. وسيتم تخزينه في فئة تخزين INTEGER.

جميع أنواع البيانات التالية مُخصصة لنوع البيانات الصحيح (INTEGER):

  • عدد صحيح، عدد صحيح، كبير.
  • إنت2، إنت4، إنت8.
  • صغير جدًا، صغير، متوسط.

عدد صحيح من نوع التقارب في SQLite يمكن أن يحتوي على أي عدد صحيح معين (موجب أو سالب) من بايت واحد إلى 8 بايت كحد أقصى.

تخزين الأرقام مع SQLite ريال

الأرقام الحقيقية هي أرقام ذات دقة فاصلة عائمة مزدوجة. SQLite يخزن الأعداد الحقيقية كمصفوفة من 8 بايت. إليك قائمة بأنواع البيانات في SQLite التي يمكنك استخدامها لتخزين الأرقام الحقيقية:

  • حقا.
  • مزدوج.
  • دقة مضاعفة.
  • يطفو.

تخزين البيانات الكبيرة باستخدام SQLite BLOB

لا توجد سوى طريقة واحدة لتخزين الملفات الكبيرة في SQLite تستخدم قاعدة البيانات نوع بيانات BLOB. يُستخدم هذا النوع من البيانات لتخزين الملفات الكبيرة مثل الصور أو أي نوع آخر من الملفات. يتم تحويل الملف إلى مصفوفة بايت ثم يُخزن بنفس حجم ملف الإدخال.

تخزين SQLite القيم المنطقية

SQLite لا يوجد فئة تخزين منطقية منفصلة. بدلاً من ذلك، يتم تخزين القيم المنطقية كأعداد صحيحة، حيث يمثل 0 خطأ و1 يمثل صحيح.

تخزين SQLite التواريخ والأوقات

يمكنك تحديد التواريخ أو الأوقات في SQLite باستخدام أحد أنواع البيانات التالية:

  • تاريخ
  • التاريخ والوقت
  • الطابع الزمني
  • الوقت

لاحظ أنه لا توجد فئة تخزين منفصلة للتاريخ أو التاريخ والوقت في SQLiteبدلاً من ذلك، يتم تخزين أي قيم تم الإعلان عنها باستخدام أحد أنواع البيانات السابقة في فئة تخزين تعتمد على تنسيق التاريخ للقيمة المُدخلة، كما يلي:

  • TEXT – إذا قمت بإدخال قيمة التاريخ بتنسيق سلسلة ISO8601 ("YYYY-MM-DD HH:MM:SS.SSS").
  • ريال – إذا قمت بإدخال قيمة التاريخ كرقم يوم جولياني، فإن عدد الأيام منذ الظهر في غرينتش في 24 نوفمبر 4714 قبل الميلاد يتم تخزين قيمة التاريخ كـ REAL.
  • INTEGER - مثل يونكس الوقت، عدد الثواني منذ 1970-01-01 00:00:00 بالتوقيت العالمي.

الأسئلة الشائعة

فئة التخزين هي كيف SQLite يخزن فعليًا قيمة: NULL، أو INTEGER، أو REAL، أو TEXT، أو BLOB، ويتم تحديد ذلك لكل قيمة في وقت التشغيل. تقارب النوع هو الفئة التي يفضلها العمود، والتي يتم اختيارها من اسم النوع المُعلن عنه، والذي SQLite يحاول التقديم.

رقم SQLite يتجاهل الرقم الموجود بين قوسين، لذا فإن VARCHAR(50) وVARCHAR يتصرفان بشكل متطابق. كلاهما يحصل على تقارب TEXT لأن اسم النوع يحتوي على CHAR، و SQLite لا يفرض أي حد للطول باستثناء قيمة SQLITE_MAX_LENGTH العامة.

استخدم الدالة `typeof()` في استعلام، مثل `SELECT typeof(column) FROM table`. تُعيد هذه الدالة نوع التخزين الفعلي للقيمة - `null`، أو `integer`، أو `real`، أو `text`، أو `blob` - والذي قد يختلف عن النوع المُعلن للعمود بسبب خاصية `ty` الديناميكية.ping.

تمت إضافة الجداول الصارمة في SQLite 3.37، قم بإيقاف خاصية تقارب الأنواع ورفض أي قيمة لا تتطابق مع النوع المُعلن للعمود. يُسمح فقط بالأنواع INT وINTEGER وREAL وTEXT وBLOB وANY، مما يُعطي خاصية تقارب الأنواع الصارمة.ping موجودة في قواعد بيانات أخرى.

خزّن الأموال كعدد صحيح (INTEGER) بأصغر وحدة قياس، مثل السنتات، لتجنب أخطاء التقريب في قيم الأعداد العشرية الحقيقية (REAL). أما في حالة الدقة المتغيرة أو العالية جدًا، فيحتفظ نوع البيانات TEXT بسلسلة الأرقام كما هي. SQLite لا يوجد نوع مخصص من النقود ذات النقطة الثابتة.

يُحدد إعداد SQLITE_MAX_LENGTH الحد الأقصى لقيمة TEXT أو BLOB، وقيمته الافتراضية مليار بايت. يدعم الإصدار الحالي ما يصل إلى 2,147,483,647 بايت. يمكنك تقليل هذا الحد أثناء التشغيل باستخدام واجهة sqlite3_limit() عند الحاجة.

نعم. تقوم برامج الذكاء الاصطناعي المساعدة بتحويل النصوص إلى لغة SQL إلى عبارات CREATE TABLE، مع اختيار SQLite فئات التخزين وأنواعها مثل الأعداد الصحيحة والنصوص والحقائق. يُحسّن توفير أنواع الأعمدة الموجودة الدقة، ويجب مراجعة استعلام SQL المُنشأ قبل تشغيله.

نعم. مساعد الطيار جيثب يقترح تعريفات الأعمدة مع SQLite أنواع البيانات مثل INTEGER وTEXT وREAL وBLOB مضمنة في محررات مثل VS Code. يقوم بقراءة المخطط المحيط ورمز الترحيل، لذا فإن عمليات الإكمال الخاصة به تعيد استخدام أسماء الجداول والأعمدة الحقيقية الخاصة بك.

تلخيص هذه التدوينة بـ: