SQLite ประเภทข้อมูล: จำนวนเต็ม, ข้อความ, ตัวเลข, จำนวนจริง, บล็อบ

⚡ สรุปอย่างชาญฉลาด

SQLite ประเภทข้อมูลทำงานแตกต่างจากฐานข้อมูลประเภทอื่น ๆ เนื่องจาก SQLite ใช้ ty แบบไดนามิกpingโดยการจัดเก็บค่าใดๆ ในคอลัมน์ใดๆ ก็ได้ คลาสการจัดเก็บข้อมูล ความสัมพันธ์ของประเภท และชื่อประเภทที่ประกาศไว้ จะร่วมกันกำหนดวิธีการบันทึกค่าแต่ละค่าลงในดิสก์

  • 🧩 ไดนามิก ไทping: SQLite เป็นฐานข้อมูลแบบไดนามิก ดังนั้นค่าที่คุณป้อนเข้าไปจะเป็นตัวกำหนดวิธีการจัดเก็บข้อมูล ไม่ใช่คำจำกัดความของคอลัมน์
  • 🗄️ คลาสการจัดเก็บข้อมูล: คลาสการจัดเก็บข้อมูลห้าประเภท ได้แก่ NULL, INTEGER, REAL, TEXT และ BLOB อธิบายวิธีการจัดเก็บค่าแต่ละค่าบนดิสก์
  • 🎯 ความสัมพันธ์ของประเภท: แต่ละคอลัมน์จะได้รับคำแนะนำเกี่ยวกับความสัมพันธ์ของข้อมูล — ข้อความ ตัวเลข จำนวนเต็ม จำนวนจริง หรือ ข้อมูลไบนารี — จากชื่อประเภทที่ประกาศไว้
  • 🔢 การจัดเก็บตัวเลข: ชนิดข้อมูลใดๆ ที่ประกาศไว้ซึ่งมี INT อยู่ภายใน จะกลายเป็น INTEGER ในขณะที่ REAL, DOUBLE และ FLOAT จะเก็บตัวเลขทศนิยมในแปดไบต์
  • 📅 วันที่และค่าบูลีน: SQLite ไม่มีคลาสเฉพาะสำหรับ DATE หรือ BOOLEAN และจะจัดเก็บค่าเหล่านั้นเป็น TEXT, REAL หรือ INTEGER แทน
  • 🤖 ความช่วยเหลือจาก AI: ผู้ช่วย AI แปลงข้อความเป็น SQL และ GitHub Copilot สร้าง SQLite การกำหนดคอลัมน์และการเลือกประเภทข้อมูลจากภาษาอังกฤษที่เข้าใจง่าย

SQLite ประเภทข้อมูล

หัวข้อด้านล่างนี้จะอธิบายวิธีการ SQLite เนื้อหาจะกล่าวถึงชนิดข้อมูล โดยเริ่มจากคลาสการจัดเก็บข้อมูลทั้งห้าแบบ จากนั้นกล่าวถึงความสัมพันธ์ของชนิดข้อมูลและกฎการกำหนดค่า และสุดท้ายคือตัวอย่างการใช้งานจริงของการจัดเก็บจำนวนเต็ม จำนวนจริง BLOB บูลีน และวันที่

ชนิดข้อมูลใน SQLite แตกต่างจากระบบจัดการฐานข้อมูลอื่นๆ ใน SQLiteคุณสามารถประกาศชนิดข้อมูลได้ตามปกติ แต่คุณยังคงสามารถเก็บค่าใดๆ ก็ได้ในชนิดข้อมูลใดๆ ก็ได้

SQLite ไม่มีประเภทข้อมูลตายตัว ไม่มีประเภทข้อมูลที่กำหนดไว้ คุณสามารถจัดเก็บข้อมูลประเภทใดก็ได้ในคอลัมน์ใดก็ได้ นี่เรียกว่าประเภทข้อมูลแบบไดนามิกping.

ในประเภทข้อมูลคงที่ เช่นในระบบจัดการฐานข้อมูลอื่นๆ หากคุณประกาศคอลัมน์ด้วยประเภทข้อมูลจำนวนเต็ม คุณจะสามารถแทรกค่าที่มีประเภทข้อมูลจำนวนเต็มเท่านั้น อย่างไรก็ตาม ในประเภทข้อมูลแบบไดนามิก เช่นใน SQLiteประเภทของคอลัมน์จะถูกกำหนดโดยค่าที่ป้อนเข้าไป จากนั้น SQLite เก็บค่านั้นขึ้นอยู่กับประเภทของมัน

SQLite คลาสพื้นที่เก็บข้อมูล

In SQLite วิธีการจัดเก็บข้อมูลจะแตกต่างกันไปตามประเภทของค่า โดยวิธีการจัดเก็บข้อมูลที่แตกต่างกันเหล่านี้เรียกว่า คลาสการจัดเก็บข้อมูล (Storage Class) SQLite.

ต่อไปนี้เป็นคลาสการจัดเก็บข้อมูลที่มีให้ใช้งาน SQLite:

  • NULL – คลาสการจัดเก็บข้อมูลนี้ใช้เพื่อจัดเก็บค่า NULL ใด ๆ
  • จำนวนเต็ม – ค่าตัวเลขใดๆ จะถูกจัดเก็บเป็นค่าจำนวนเต็มที่มีเครื่องหมาย (สามารถเก็บได้ทั้งค่าจำนวนเต็มบวกและลบ) ค่าจำนวนเต็มใน SQLite จะถูกจัดเก็บไว้ในที่เก็บข้อมูลขนาด 1, 2, 3, 4, 6 หรือ 8 ไบต์ ขึ้นอยู่กับค่าของตัวเลข
  • REAL – คลาสการจัดเก็บข้อมูลนี้ใช้สำหรับจัดเก็บค่าทศนิยม โดยจะใช้พื้นที่จัดเก็บข้อมูล 8 ไบต์
  • TEXT – ใช้สำหรับจัดเก็บข้อความ และรองรับการเข้ารหัสหลายแบบ เช่น UTF-8, UTF-16BE หรือ UTF-16LE
  • หยด – ใช้สำหรับจัดเก็บไฟล์ขนาดใหญ่ เช่น รูปภาพหรือไฟล์ข้อความ ค่าจะถูกจัดเก็บในรูปแบบอาร์เรย์ไบต์ เช่นเดียวกับค่าที่ป้อนเข้ามา

SQLite ประเภทความสัมพันธ์

ความสัมพันธ์ของประเภทข้อมูล (Type affinity) คือประเภทข้อมูลที่แนะนำให้ใช้จัดเก็บในคอลัมน์ อย่างไรก็ตาม คุณยังสามารถจัดเก็บข้อมูลประเภทใดก็ได้ตามต้องการ ประเภทข้อมูลเหล่านี้เป็นเพียงคำแนะนำ ไม่ใช่ข้อกำหนดบังคับ

ประเภทเหล่านี้ถูกนำมาใช้ใน SQLite เพื่อเพิ่มความเข้ากันได้สูงสุดระหว่าง SQLite และอื่น ๆ ระบบจัดการฐานข้อมูลs.

คอลัมน์ใด ๆ ที่ประกาศใน SQLite ฐานข้อมูลจะถูกกำหนดความสัมพันธ์ของประเภทข้อมูลโดยขึ้นอยู่กับประเภทข้อมูลที่ประกาศไว้ ต่อไปนี้คือรายการความสัมพันธ์ของประเภทข้อมูลในฐานข้อมูล SQLite:

  • ข้อความ.
  • ตัวเลข
  • จำนวนเต็ม.
  • จริง.
  • หยด.

นี่คือวิธี SQLite กำหนดความสัมพันธ์ของคอลัมน์จากประเภทข้อมูลที่ประกาศไว้:

  • ความสัมพันธ์จำนวนเต็มถูกกำหนดหากประเภทที่ประกาศมี เชือก “อินท”
  • ระบบจะกำหนด affinity เป็น TEXT หากคอลัมน์นั้นมีชนิดข้อมูลเป็นสตริงใดสตริงหนึ่งต่อไปนี้: “TEXT”, “CHAR” หรือ “CLOB” ตัวอย่างเช่น ชนิดข้อมูล VARCHAR จะถูกกำหนด affinity เป็น TEXT
  • BLOB affinity ถูกกำหนดถ้าคอลัมน์ไม่ได้ระบุประเภทหรือชนิดข้อมูลเป็น BLOB
  • ค่าความสัมพันธ์แบบ REAL จะถูกกำหนดหากชนิดข้อมูลมีสตริงใดสตริงหนึ่งต่อไปนี้: “DOUB”, “REAL” หรือ “FLOAT”
  • ความสัมพันธ์ของ NUMERIC ถูกกำหนดให้กับข้อมูลประเภทอื่น

นอกจากนี้ ยังมีตารางด้านล่างที่แสดงตัวอย่างบางส่วนของแผนที่ping ระหว่าง SQLite ประเภทข้อมูลและความเกี่ยวข้องที่กำหนดโดยกฎเหล่านี้:

แผนที่แสดงที่ตั้งบริษัทping ระหว่าง SQLite ประเภทข้อมูลที่ประกาศและค่าความสัมพันธ์ของประเภทข้อมูลที่กำหนด โดยแสดงตัวอย่างของ INT, CHAR, TEXT, BLOB, REAL, FLOAT และ NUMERIC

ตัวอย่างการจัดเก็บข้อมูลประเภทต่างๆ SQLite

การจัดเก็บตัวเลขด้วย SQLite จำนวนเต็ม

หากคอลัมน์ใดมีชนิดข้อมูลที่มีคำว่า “INT” อยู่ ระบบจะกำหนดให้คอลัมน์นั้นมีชนิดข้อมูลเป็น INTEGER และจะจัดเก็บในคลาสจัดเก็บข้อมูลแบบ INTEGER

ประเภทข้อมูลต่อไปนี้ทั้งหมดถูกกำหนดให้มีความสัมพันธ์กับประเภทข้อมูล INTEGER:

  • INT, จำนวนเต็ม, BIGINT
  • INT2, INT4, INT8.
  • ตัวเล็กจิ๋ว ตัวเล็ก ขนาดกลาง

ความสัมพันธ์ประเภท INTEGER ใน SQLite สามารถเก็บค่าจำนวนเต็มที่กำหนด (บวกหรือลบ) ได้ตั้งแต่ 1 ไบต์ จนถึงสูงสุด 8 ไบต์

การจัดเก็บตัวเลขด้วย SQLite REAL

ตัวเลขจริง (REAL numbers) คือตัวเลขที่มีความแม่นยำแบบจุดลอยตัวสองเท่า (double floating-point precision) SQLite จัดเก็บจำนวนจริงในรูปแบบอาร์เรย์ 8 ไบต์ ต่อไปนี้คือรายการประเภทข้อมูลใน SQLite ที่คุณสามารถใช้เพื่อจัดเก็บตัวเลขจริง:

  • จริง.
  • สองเท่า.
  • ความแม่นยำสองเท่า
  • ลอย.

จัดเก็บข้อมูลขนาดใหญ่ด้วย SQLite หยด

มีเพียงวิธีเดียวในการจัดเก็บไฟล์ขนาดใหญ่ในระบบ SQLite ฐานข้อมูลนั้นใช้ชนิดข้อมูล BLOB ชนิดข้อมูลนี้ใช้สำหรับจัดเก็บไฟล์ขนาดใหญ่ เช่น รูปภาพ หรือไฟล์ประเภทใดๆ ไฟล์จะถูกแปลงเป็นอาร์เรย์ไบต์แล้วจัดเก็บในขนาดเดียวกับไฟล์อินพุต

การเก็บรักษา SQLite booleans

SQLite ไม่มีคลาสจัดเก็บค่าบูลีนแยกต่างหาก แต่ค่าบูลีนจะถูกจัดเก็บเป็นค่าจำนวนเต็ม โดย 0 แทนค่าเท็จ และ 1 แทนค่าจริง

การเก็บรักษา SQLite วันที่และเวลา

คุณสามารถระบุวันที่หรือช่วงเวลาได้ใน SQLite โดยใช้ชนิดข้อมูลต่อไปนี้:

  • วัน
  • วันเวลา
  • การประทับเวลา
  • เวลา

โปรดทราบว่าไม่มีคลาสจัดเก็บข้อมูล DATE หรือ DATETIME แยกต่างหากใน SQLiteแต่ค่าใดๆ ที่ประกาศด้วยชนิดข้อมูลก่อนหน้านี้จะถูกจัดเก็บไว้ในคลาสการจัดเก็บข้อมูลโดยขึ้นอยู่กับรูปแบบวันที่ของค่าที่แทรกเข้าไป ดังนี้:

  • TEXT – หากคุณป้อนค่าวันที่ในรูปแบบสตริง ISO8601 (“YYYY-MM-DD HH:MM:SS.SSS”)
  • REAL – หากคุณป้อนค่าวันที่เป็นเลขวันจูเลียน ซึ่งก็คือจำนวนวันนับตั้งแต่เที่ยงวันในกรีนวิชของวันที่ 24 พฤศจิกายน ค.ศ. 4714 ก่อนคริสตกาล ค่าวันที่นั้นจะถูกจัดเก็บเป็นค่า REAL
  • จำนวนเต็ม - เช่น ยูนิกซ์ เวลา จำนวนวินาทีตั้งแต่ 1970-01-01 00:00:00 UTC

คำถามที่พบบ่อย

คลาสการจัดเก็บข้อมูลคือวิธีการ SQLite จัดเก็บค่าทางกายภาพ: NULL, INTEGER, REAL, TEXT หรือ BLOB ซึ่งจะถูกกำหนดตามค่าแต่ละค่าในขณะรันไทม์ ความสัมพันธ์ของประเภท (Type affinity) คือคลาสที่คอลัมน์นั้นต้องการ โดยเลือกจากชื่อประเภทที่ประกาศไว้ ซึ่ง SQLite พยายามสมัคร

ลำดับ SQLite ไม่สนใจตัวเลขในวงเล็บ ดังนั้น VARCHAR(50) และ VARCHAR จึงทำงานเหมือนกัน ทั้งคู่ได้รับความสัมพันธ์แบบ TEXT เนื่องจากชื่อประเภทมี CHAR อยู่ด้วย และ SQLite ไม่มีการกำหนดขีดจำกัดความยาว ยกเว้นค่า SQLITE_MAX_LENGTH ทั่วโลก

ใช้ฟังก์ชัน `typeof()` ในคำสั่ง SQL เช่น `SELECT typeof(column) FROM table` ฟังก์ชันนี้จะส่งคืนคลาสการจัดเก็บข้อมูลจริงของค่า — null, integer, real, text หรือ blob — ซึ่งอาจแตกต่างจากประเภทที่ประกาศไว้ของคอลัมน์เนื่องจากประเภทแบบไดนามิกping.

ตารางที่เข้มงวด เพิ่มเข้ามาแล้ว SQLite 3.37 ปิดการใช้งาน Type Affinity และปฏิเสธค่าใดๆ ที่ไม่ตรงกับประเภทที่ประกาศไว้ของคอลัมน์ อนุญาตเฉพาะ INT, INTEGER, REAL, TEXT, BLOB และ ANY เท่านั้น ซึ่งทำให้ประเภทข้อมูลมีความเข้มงวดมากขึ้นping พบในฐานข้อมูลอื่น ๆ

จัดเก็บค่าเงินเป็นจำนวนเต็ม (INTEGER) ในหน่วยที่เล็กที่สุด เช่น เซนต์ เพื่อหลีกเลี่ยงข้อผิดพลาดจากการปัดเศษของค่าทศนิยม (REAL) สำหรับค่าที่แปรผันได้หรือความแม่นยำสูงมาก รูปแบบข้อความ (TEXT) จะคงค่าตัวเลขที่ถูกต้องเอาไว้ SQLite ไม่มีประเภทเงินแบบจุดคงที่โดยเฉพาะ

การตั้งค่า SQLITE_MAX_LENGTH จะจำกัดค่า TEXT หรือ BLOB โดยค่าเริ่มต้นคือหนึ่งพันล้านไบต์ การใช้งานในปัจจุบันรองรับได้สูงสุด 2,147,483,647 ไบต์ คุณสามารถลดขีดจำกัดได้ในขณะรันไทม์โดยใช้ส่วนต่อประสาน sqlite3_limit() เมื่อจำเป็น

ใช่แล้ว ระบบ AI แปลงข้อความเป็นคำสั่ง SQL จะแปลงคำอธิบายภาษาอังกฤษธรรมดาให้เป็นคำสั่ง CREATE TABLE โดยเลือก... SQLite คลาสและรูปแบบการจัดเก็บข้อมูล เช่น INTEGER, TEXT และ REAL การระบุประเภทคอลัมน์ที่มีอยู่จะช่วยเพิ่มความแม่นยำ และควรตรวจสอบ SQL ที่สร้างขึ้นก่อนใช้งาน

ใช่. นักบิน GitHub แนะนำคำจำกัดความของคอลัมน์ด้วย SQLite ประเภทข้อมูล เช่น INTEGER, TEXT, REAL และ BLOB สามารถใช้งานได้โดยตรงในโปรแกรมแก้ไขข้อความ เช่น VS Codeโค้ดนี้จะอ่านโครงสร้างและโค้ดการย้ายข้อมูลโดยรอบ ดังนั้นคำแนะนำในการเติมข้อความอัตโนมัติจึงใช้ชื่อตารางและชื่อคอลัมน์จริงของคุณ

สรุปโพสต์นี้ด้วย: