SQLite Các kiểu dữ liệu: Số nguyên, Văn bản, Số học, Số thực, Khối dữ liệu

⚡ Tóm tắt thông minh

SQLite Các kiểu dữ liệu hoạt động khác với các cơ sở dữ liệu khác vì SQLite sử dụng kiểu độngpingLưu trữ bất kỳ giá trị nào trong bất kỳ cột nào. Các lớp lưu trữ, độ tương thích kiểu và tên kiểu được khai báo cùng nhau xác định cách mỗi giá trị được lưu trữ vật lý trên đĩa.

  • 🧩 Dynamic Typing: SQLite Nó được định kiểu động, vì vậy giá trị bạn nhập vào, chứ không phải định nghĩa cột, sẽ quyết định cách dữ liệu được lưu trữ.
  • 🗄️ Các lớp lưu trữ: Năm lớp lưu trữ — NULL, INTEGER, REAL, TEXT và BLOB — mô tả cách mỗi giá trị được lưu giữ trên đĩa.
  • 🎯 Độ tương đồng loại: Mỗi cột nhận được một kiểu dữ liệu được đề xuất — TEXT, NUMERIC, INTEGER, REAL hoặc BLOB — dựa trên tên kiểu dữ liệu đã khai báo của nó.
  • 🔢 Lưu trữ số: Bất kỳ kiểu dữ liệu nào được khai báo chứa INT đều trở thành INTEGER, trong khi REAL, DOUBLE và FLOAT chứa các số thực dấu phẩy động trong tám byte.
  • 📅 Ngày tháng và giá trị Boolean: SQLite Không có lớp DATE hoặc BOOLEAN chuyên dụng và thay vào đó lưu trữ các giá trị đó dưới dạng TEXT, REAL hoặc INTEGER.
  • 🤖 Hỗ trợ AI: Các trợ lý chuyển đổi văn bản thành SQL bằng AI và GitHub Copilot tạo ra SQLite Định nghĩa cột và chọn kiểu dữ liệu bằng ngôn ngữ tiếng Anh đơn giản.

SQLite Loại dữ liệu

Các phần bên dưới giải thích cách thức thực hiện SQLite Nội dung sách đề cập đến các kiểu dữ liệu, bắt đầu với năm lớp lưu trữ, sau đó là sự tương thích giữa các kiểu và các quy tắc gán, và cuối cùng là các ví dụ minh họa về việc lưu trữ số nguyên, số thực, BLOB, Boolean và ngày tháng.

Các kiểu dữ liệu trong SQLite khác với các hệ thống quản lý cơ sở dữ liệu khác. Trong SQLiteBạn có thể khai báo các kiểu dữ liệu như bình thường, nhưng vẫn có thể lưu trữ bất kỳ giá trị nào trong bất kỳ kiểu dữ liệu nào.

SQLite Nó không có kiểu dữ liệu cố định. Không có kiểu dữ liệu cố định; bạn có thể lưu trữ bất kỳ loại dữ liệu nào bạn muốn trong bất kỳ cột nào. Điều này được gọi là kiểu dữ liệu động.ping.

Trong các kiểu dữ liệu tĩnh, cũng như trong các hệ quản trị cơ sở dữ liệu khác, nếu bạn khai báo một cột với kiểu dữ liệu số nguyên, bạn chỉ có thể chèn các giá trị thuộc kiểu dữ liệu số nguyên. Tuy nhiên, trong các kiểu dữ liệu động, như trong SQLite, kiểu dữ liệu của cột được xác định bởi giá trị được nhập vào, và sau đó SQLite lưu trữ giá trị đó tùy thuộc vào loại của nó.

SQLite Các lớp lưu trữ

In SQLite Có nhiều phương pháp lưu trữ khác nhau tùy thuộc vào loại giá trị; các phương pháp lưu trữ khác nhau này được gọi là các lớp lưu trữ trong ngôn ngữ lập trình. SQLite.

Sau đây là các lớp lưu trữ có sẵn trong SQLite:

  • NULL – lớp lưu trữ này được sử dụng để lưu trữ bất kỳ giá trị NULL nào.
  • số nguyên – Mọi giá trị số đều được lưu trữ dưới dạng giá trị số nguyên có dấu (nó có thể chứa cả giá trị số nguyên dương và âm). Các giá trị INTEGER trong SQLite được lưu trữ trong bộ nhớ 1, 2, 3, 4, 6 hoặc 8 byte tùy thuộc vào giá trị của số.
  • CÓ THẬT – Lớp lưu trữ này được sử dụng để lưu trữ các giá trị dấu phẩy động, và chúng được lưu trữ trong 8 byte bộ nhớ.
  • TEXT – Lưu trữ các chuỗi văn bản. Nó cũng hỗ trợ nhiều mã hóa khác nhau như UTF-8, UTF-16BE hoặc UTF-16LE.
  • BÃI – Được sử dụng để lưu trữ các tệp lớn, chẳng hạn như hình ảnh hoặc tệp văn bản. Giá trị được lưu trữ dưới dạng mảng byte, giống như giá trị đầu vào.

SQLite Loại mối quan hệ

Kiểu dữ liệu tương thích (Type affinity) là kiểu dữ liệu được khuyến nghị để lưu trữ trong một cột. Tuy nhiên, bạn vẫn có thể lưu trữ bất kỳ kiểu dữ liệu nào bạn muốn; các kiểu dữ liệu này chỉ được khuyến nghị, không bắt buộc.

Những loại này đã được giới thiệu ở SQLite để tối đa hóa khả năng tương thích giữa SQLite và khác hệ thống quản lý cơ sở dữ liệus.

Bất kỳ cột nào được khai báo trong SQLite Cơ sở dữ liệu được gán một kiểu liên kết tùy thuộc vào kiểu dữ liệu được khai báo. Dưới đây là danh sách các kiểu liên kết trong SQLite:

  • CHỮ.
  • SỐ.
  • INTEGER.
  • THỰC TẾ.
  • BÃI.

Đây là cách SQLite Xác định mức độ tương thích của một cột dựa trên kiểu dữ liệu đã khai báo của nó:

  • Mối quan hệ INTEGER được chỉ định nếu kiểu khai báo chứa chuỗi “INT”.
  • Thuộc tính TEXT được gán nếu cột chứa một trong các chuỗi sau trong kiểu dữ liệu của nó: “TEXT”, “CHAR” hoặc “CLOB”. Ví dụ, kiểu VARCHAR sẽ được gán thuộc tính TEXT.
  • Mối quan hệ BLOB được chỉ định nếu cột không có loại được chỉ định hoặc loại dữ liệu là BLOB.
  • Thuộc tính REAL được gán nếu kiểu dữ liệu chứa một trong các chuỗi sau: “DOUB”, “REAL” hoặc “FLOAT”.
  • Mối quan hệ NUMERIC được chỉ định cho bất kỳ loại dữ liệu nào khác.

Bảng dưới đây cũng hiển thị một số ví dụ về bản đồ.ping giữa SQLite các kiểu dữ liệu và mối quan hệ của chúng được xác định bởi các quy tắc sau:

Bản đồping giữa SQLite Khai báo các kiểu dữ liệu và mối liên hệ kiểu được gán cho chúng, hiển thị các ví dụ về INT, CHAR, TEXT, BLOB, REAL, FLOAT và NUMERIC.

Ví dụ về việc lưu trữ các kiểu dữ liệu trong SQLite

Lưu trữ số với SQLite số nguyên

Nếu bất kỳ cột nào có kiểu dữ liệu chứa từ “INT”, nó sẽ được gán kiểu dữ liệu INTEGER. Dữ liệu này sẽ được lưu trữ trong lớp lưu trữ INTEGER.

Tất cả các kiểu dữ liệu sau đây đều được gán kiểu INTEGER:

  • INT, INTEGER, LỚN.
  • INT2, INT4, INT8.
  • TINYINT, SMALLINT, MEDIUMINT.

Kiểu ái lực INTEGER trong SQLite Có thể chứa bất kỳ số nguyên nào được chỉ định (dương hoặc âm) từ 1 byte đến tối đa 8 byte.

Lưu trữ số với SQLite CÓ THẬT

Số thực là những số có độ chính xác dấu phẩy động gấp đôi. SQLite Lưu trữ các số thực dưới dạng mảng 8 byte. Dưới đây là danh sách các kiểu dữ liệu trong SQLite mà bạn có thể sử dụng để lưu trữ số THỰC:

  • THỰC TẾ.
  • GẤP ĐÔI.
  • ĐỘ CHÍNH XÁC GẤP ĐÔI.
  • TRÔI NỔI.

Lưu trữ dữ liệu lớn với SQLite BÃI

Chỉ có một cách duy nhất để lưu trữ các tệp lớn trong... SQLite Cơ sở dữ liệu này sử dụng kiểu dữ liệu BLOB. Kiểu dữ liệu này được dùng để lưu trữ các tệp lớn như hình ảnh hoặc các tệp thuộc bất kỳ loại nào. Tệp được chuyển đổi thành mảng byte và sau đó được lưu trữ với cùng kích thước với tệp đầu vào.

Lưu trữ SQLite Booleans

SQLite Không có lớp lưu trữ BOOLEAN riêng biệt. Thay vào đó, các giá trị BOOLEAN được lưu trữ dưới dạng số nguyên, trong đó 0 biểu thị giá trị false và 1 biểu thị giá trị true.

Lưu trữ SQLite ngày và giờ

Bạn có thể khai báo ngày tháng hoặc ngày giờ trong SQLite sử dụng một trong các kiểu dữ liệu sau:

  • NGÀY
  • NGÀY GIỜ
  • THỜI GIAN
  • THỜI GIAN

Lưu ý rằng không có lớp lưu trữ DATE hoặc DATETIME riêng biệt nào trong SQLiteThay vào đó, bất kỳ giá trị nào được khai báo với một trong các kiểu dữ liệu trước đó sẽ được lưu trữ trong một lớp lưu trữ tùy thuộc vào định dạng ngày tháng của giá trị được chèn, như sau:

  • TEXT – nếu bạn nhập giá trị ngày tháng ở định dạng chuỗi ISO8601 (“YYYY-MM-DD HH:MM:SS.SSS”).
  • CÓ THẬT – Nếu bạn nhập giá trị ngày tháng dưới dạng số ngày Julian, tức là số ngày kể từ trưa ngày 24 tháng 11 năm 4714 trước Công nguyên tại Greenwich, thì giá trị ngày tháng sẽ được lưu trữ dưới dạng số thực.
  • số nguyên - như Unix Thời gian, số giây kể từ 1970-01-01 00:00:00 UTC.

Câu Hỏi Thường Gặp

Lớp lưu trữ là cách SQLite Về mặt vật lý, nó lưu trữ một giá trị: NULL, INTEGER, REAL, TEXT hoặc BLOB, được quyết định cho mỗi giá trị tại thời điểm chạy. Độ ưu tiên kiểu dữ liệu là lớp mà một cột ưu tiên, được chọn từ tên kiểu dữ liệu đã khai báo của nó. SQLite cố gắng áp dụng.

STT SQLite bỏ qua số trong ngoặc đơn, vì vậy VARCHAR(50) và VARCHAR hoạt động giống hệt nhau. Cả hai đều nhận được sự tương thích TEXT vì tên kiểu chứa CHAR và SQLite Không áp đặt bất kỳ giới hạn độ dài nào ngoại trừ giá trị toàn cục SQLITE_MAX_LENGTH.

Sử dụng hàm typeof() trong truy vấn, ví dụ: SELECT typeof(column) FROM table. Hàm này trả về lớp lưu trữ thực của giá trị — null, integer, real, text hoặc blob — có thể khác với kiểu dữ liệu được khai báo của cột do kiểu dữ liệu động.ping.

Bảng STRICT, được thêm vào trong SQLite 3.37, tắt tính năng liên kết kiểu dữ liệu và từ chối bất kỳ giá trị nào không khớp với kiểu dữ liệu đã khai báo của cột. Chỉ cho phép các kiểu INT, INTEGER, REAL, TEXT, BLOB và ANY, tạo ra kiểu dữ liệu cứng nhắc.ping Đã tìm thấy trong các cơ sở dữ liệu khác.

Lưu trữ tiền dưới dạng số nguyên (INTEGER) với đơn vị nhỏ nhất, chẳng hạn như xu, để tránh sai số làm tròn của các giá trị dấu phẩy động (REAL). Đối với độ chính xác thay đổi hoặc rất cao, kiểu dữ liệu TEXT sẽ giữ nguyên chuỗi số chính xác. SQLite không có loại tiền tệ cố định nào.

Tham số SQLITE_MAX_LENGTH giới hạn giá trị của kiểu dữ liệu TEXT hoặc BLOB và mặc định là một tỷ byte. Phiên bản hiện tại hỗ trợ tối đa 2,147,483,647 byte. Bạn có thể giảm giới hạn này khi chạy chương trình bằng giao diện sqlite3_limit() khi cần thiết.

Đúng vậy. Các trợ lý chuyển văn bản thành SQL bằng AI sẽ chuyển đổi mô tả bằng tiếng Anh thông thường thành các câu lệnh CREATE TABLE, lựa chọn SQLite Các lớp lưu trữ và các thuộc tính liên kết như INTEGER, TEXT và REAL. Việc cung cấp các kiểu dữ liệu cột hiện có sẽ cải thiện độ chính xác, và câu lệnh SQL được tạo ra cần được xem xét trước khi chạy.

Vâng. Trợ lý GitHub đề xuất định nghĩa cột với SQLite các kiểu dữ liệu như INTEGER, TEXT, REAL và BLOB được hỗ trợ trực tiếp trong các trình soạn thảo như... VS CodeNó đọc mã lược đồ và mã di chuyển xung quanh, vì vậy các gợi ý hoàn thành của nó sẽ sử dụng lại tên bảng và cột thực của bạn.

Tóm tắt bài viết này với: