SQLite Typy danych: Int, Tekst, Numeryczne, Rzeczywiste, Blob

โšก Inteligentne podsumowanie

SQLite typy danych dziaล‚ajฤ… inaczej niลผ inne bazy danych, poniewaลผ SQLite uลผywa dynamicznego typing, przechowujฤ…c dowolnฤ… wartoล›ฤ‡ w dowolnej kolumnie. Klasy pamiฤ™ci masowej, powinowactwo typรณw i zadeklarowane nazwy typรณw razem okreล›lajฤ… sposรณb fizycznego zapisywania kaลผdej wartoล›ci na dysku.

  • ๐Ÿงฉ Dynamiczny Typing: SQLite jest dynamicznie typowany, wiฤ™c o sposobie przechowywania danych decyduje wprowadzona przez Ciebie wartoล›ฤ‡, a nie definicja kolumny.
  • ๐Ÿ—„๏ธ Klasy pamiฤ™ci masowej: Piฤ™ฤ‡ klas pamiฤ™ci โ€” NULL, INTEGER, REAL, TEXT i BLOB โ€” opisuje sposรณb przechowywania kaลผdej wartoล›ci na dysku.
  • ๐ŸŽฏ Powinowactwo typรณw: Kaลผda kolumna otrzymuje zalecane powinowactwo โ€” TEXT, NUMERIC, INTEGER, REAL lub BLOB โ€” na podstawie zadeklarowanej nazwy typu.
  • ๐Ÿ”ข Przechowywanie liczb: Kaลผdy zadeklarowany typ zawierajฤ…cy wartoล›ฤ‡ INT staje siฤ™ typem INTEGER, podczas gdy typy REAL, DOUBLE i FLOAT przechowujฤ… liczby zmiennoprzecinkowe w oล›miu bajtach.
  • ๐Ÿ“… Daty i wartoล›ci logiczne: SQLite nie ma dedykowanej klasy DATE lub BOOLEAN i zamiast tego przechowuje te wartoล›ci jako TEXT, REAL lub INTEGER.
  • ๐Ÿค– Pomoc AI: Asystenci AI do przetwarzania tekstu na SQL i GitHub Copilot generujฤ… SQLite definicje kolumn i wybieranie typรณw danych z poziomu prostego jฤ™zyka angielskiego.

SQLite Typy danych

Poniลผsze sekcje wyjaล›niajฤ…, jak SQLite zajmuje siฤ™ typami danych, zaczynajฤ…c od piฤ™ciu klas pamiฤ™ci masowej, nastฤ™pnie powinowactwem typรณw i zasadami ich przypisywania, a na koล„cu omawia przykล‚ady przechowywania liczb caล‚kowitych, liczb rzeczywistych, obiektรณw BLOB, wartoล›ci logicznych i dat.

Typy danych w SQLite rรณลผniฤ… siฤ™ od tych w innych systemach zarzฤ…dzania bazami danych. W SQLite, moลผesz deklarowaฤ‡ typy danych normalnie, ale nadal moลผesz przechowywaฤ‡ dowolnฤ… wartoล›ฤ‡ w dowolnym typie danych.

SQLite Jest beztypowy. Nie ma staล‚ych typรณw danych; moลผesz przechowywaฤ‡ dowolny typ danych w dowolnej kolumnie. Nazywa siฤ™ to dynamicznym typem.ping.

W typach statycznych, podobnie jak w innych systemach zarzฤ…dzania bazami danych, jeล›li zadeklarujesz kolumnฤ™ z typem danych integer, moลผesz wstawiaฤ‡ tylko wartoล›ci typu integer. Jednak w typach dynamicznych, takich jak SQLite, typ kolumny jest okreล›lany przez wprowadzonฤ… wartoล›ฤ‡, a nastฤ™pnie SQLite przechowuje tฤ™ wartoล›ฤ‡ w zaleลผnoล›ci od jej typu.

SQLite Klasy pamiฤ™ci

In SQLite Istniejฤ… rรณลผne metody przechowywania w zaleลผnoล›ci od typu wartoล›ci; te rรณลผne metody przechowywania nazywane sฤ… klasami przechowywania SQLite.

Poniลผej przedstawiono klasy pamiฤ™ci masowej dostฤ™pne w SQLite:

  • NULL โ€“ ta klasa pamiฤ™ci sล‚uลผy do przechowywania dowolnej wartoล›ci NULL.
  • LICZBA CAลKOWITA โ€“ kaลผda wartoล›ฤ‡ liczbowa jest przechowywana jako liczba caล‚kowita ze znakiem (moลผe zawieraฤ‡ zarรณwno dodatnie, jak i ujemne wartoล›ci caล‚kowite). Wartoล›ci INTEGER w SQLite sฤ… przechowywane w pamiฤ™ci o pojemnoล›ci 1, 2, 3, 4, 6 lub 8 bajtรณw, w zaleลผnoล›ci od wartoล›ci liczby.
  • Niezaleลผne โ€“ ta klasa pamiฤ™ci masowej sล‚uลผy do przechowywania wartoล›ci zmiennoprzecinkowych. Sฤ… one przechowywane w 8 bajtach pamiฤ™ci masowej.
  • TEKST โ€“ przechowuje ciฤ…gi tekstowe. Obsล‚uguje rรณwnieลผ rรณลผne kodowania, takie jak UTF-8, UTF-16BE lub UTF-16LE.
  • KROPELKA โ€“ sล‚uลผy do przechowywania duลผych plikรณw, takich jak obrazy czy pliki tekstowe. Wartoล›ฤ‡ jest przechowywana jako tablica bajtรณw, tak samo jak wartoล›ฤ‡ wejล›ciowa.

SQLite Typ powinowactwa

Powinowactwo typรณw to zalecany typ danych przechowywanych w kolumnie. Moลผesz jednak przechowywaฤ‡ dowolny typ danych, jaki chcesz; typy te sฤ… zalecane, a nie wymagane.

Typy te zostaล‚y wprowadzone w SQLite aby zmaksymalizowaฤ‡ kompatybilnoล›ฤ‡ pomiฤ™dzy SQLite i inne system zarzฤ…dzania bazฤ… danychs.

Dowolna kolumna zadeklarowana w pliku an SQLite Baza danych ma przypisane powinowactwo typu w zaleลผnoล›ci od zadeklarowanego typu danych. Oto lista powinowactw typu w SQLite:

  • TEKST.
  • NUMERYCZNE.
  • LICZBA CAลKOWITA.
  • PRAWDZIWY.
  • KROPELKA.

Oto jak SQLite okreล›la powinowactwo kolumny na podstawie zadeklarowanego typu danych:

  • Powinowactwo INTEGER jest przypisywane, jeล›li zadeklarowany typ zawiera ciฤ…g โ€žINTโ€.
  • Powinowactwo TEXT jest przypisywane, jeล›li kolumna zawiera w swoim typie danych jeden z nastฤ™pujฤ…cych ciฤ…gรณw: โ€žTEXTโ€, โ€žCHARโ€ lub โ€žCLOBโ€. Na przykล‚ad, typowi VARCHAR zostanie przypisane powinowactwo TEXT.
  • Powinowactwo BLOB jest przypisywane, jeล›li kolumna nie ma okreล›lonego typu lub typ danych to BLOB.
  • Powinowactwo REAL jest przypisywane, jeลผeli typ zawiera jeden z nastฤ™pujฤ…cych ciฤ…gรณw: โ€žDOUBโ€, โ€žREALโ€ lub โ€žFLOATโ€.
  • Powinowactwo NUMERIC jest przypisane do dowolnego innego typu danych.

Poniลผej znajduje siฤ™ rรณwnieลผ tabela przedstawiajฤ…ca przykล‚ady mapping pomiฤ™dzy SQLite typy danych i ich powinowactwa okreล›lone przez te zasady:

Mapaping pomiฤ™dzy SQLite zadeklarowane typy danych i przypisane im powinowactwa typรณw, pokazujฤ…ce przykล‚ady INT, CHAR, TEXT, BLOB, REAL, FLOAT i NUMERIC

Przykล‚ady przechowywania typรณw danych w SQLite

Przechowywanie liczb za pomocฤ… SQLite LICZBA CAลKOWITA

Jeล›li jakakolwiek kolumna ma typ danych zawierajฤ…cy sล‚owo โ€žINTโ€, zostanie mu przypisane powinowactwo typu INTEGER. Zostanie ono zapisane w klasie pamiฤ™ci INTEGER.

Wszystkim nastฤ™pujฤ…cym typom danych przypisane jest powinowactwo typu INTEGER:

  • CAลKOWITA, LICZBA CAลKOWITA, DUลปY CAลKOWITY.
  • INT2, INT4, INT8.
  • TINYINT, SMALLINT, MEDIUMINT.

Powinowactwo typu INTEGER w SQLite moลผe przechowywaฤ‡ dowolnฤ… przypisanฤ… liczbฤ™ caล‚kowitฤ… (dodatniฤ… lub ujemnฤ…) od 1 bajtu do maksymalnie 8 bajtรณw.

Przechowywanie liczb za pomocฤ… SQLite Niezaleลผne

Liczby RZECZYWISTE to liczby o podwรณjnej precyzji zmiennoprzecinkowej. SQLite Przechowuje liczby rzeczywiste jako tablicฤ™ 8-bajtowฤ…. Oto lista typรณw danych w SQLite ktรณrego moลผna uลผywaฤ‡ do przechowywania liczb RZECZYWISTYCH:

  • PRAWDZIWY.
  • PODWร“JNIE.
  • PODWร“JNA PRECYZJA.
  • PLATFORMA.

Przechowywanie duลผych danych za pomocฤ… SQLite KROPELKA

Istnieje tylko jeden sposรณb przechowywania duลผych plikรณw w SQLite Baza danych korzysta z typu danych BLOB. Ten typ danych sล‚uลผy do przechowywania duลผych plikรณw, takich jak obrazy lub pliki dowolnego typu. Plik jest konwertowany na tablicฤ™ bajtรณw, a nastฤ™pnie przechowywany w tym samym rozmiarze co plik wejล›ciowy.

Przechowywanie SQLite Booleans

SQLite nie ma osobnej klasy pamiฤ™ci BOOLEAN. Zamiast tego wartoล›ci BOOLEAN sฤ… przechowywane jako liczby caล‚kowite, gdzie 0 oznacza faล‚sz, a 1 prawdฤ™.

Przechowywanie SQLite daty i godziny

Moลผesz deklarowaฤ‡ daty lub daty i godziny w SQLite uลผywajฤ…c jednego z nastฤ™pujฤ…cych typรณw danych:

  • DATA
  • DATA GODZINA
  • ZNAK CZASU
  • CZAS

Naleลผy pamiฤ™taฤ‡, ลผe w tym modelu nie ma osobnej klasy pamiฤ™ci DATE ani DATETIME. SQLiteZamiast tego wszelkie wartoล›ci zadeklarowane przy uลผyciu jednego z poprzednich typรณw danych sฤ… przechowywane w klasie pamiฤ™ci masowej, w zaleลผnoล›ci od formatu daty wstawionej wartoล›ci, w nastฤ™pujฤ…cy sposรณb:

  • TEKST โ€“ jeล›li wprowadzisz wartoล›ฤ‡ daty w formacie ciฤ…gu ISO8601 (โ€žRRRR-MM-DD GG:MM:SS.SSSโ€).
  • Niezaleลผne โ€“ jeล›li wprowadzisz wartoล›ฤ‡ daty jako liczbฤ™ dni w kalendarzu juliaล„skim, czyli liczbฤ™ dni od poล‚udnia w Greenwich 24 listopada 4714 r. p.n.e. Wartoล›ฤ‡ daty zostanie wรณwczas zapisana jako liczba RZECZYWISTA.
  • LICZBA CAลKOWITA - tak jak Unix Czas, liczba sekund od 1970-01-01 00:00:00 UTC.

FAQ

Klasa pamiฤ™ci masowej to jak SQLite Fizycznie przechowuje wartoล›ฤ‡: NULL, INTEGER, REAL, TEXT lub BLOB, ustalanฤ… dla kaลผdej wartoล›ci w czasie wykonywania. Powinowactwo typu to klasa preferowana przez kolumnฤ™, wybrana z zadeklarowanej nazwy typu, ktรณra SQLite prรณbuje zล‚oลผyฤ‡ wniosek.

Nie. SQLite ignoruje liczbฤ™ w nawiasach, wiฤ™c VARCHAR(50) i VARCHAR zachowujฤ… siฤ™ identycznie. Oba typy otrzymujฤ… powinowactwo do TEXT, poniewaลผ nazwa typu zawiera CHAR, a SQLite nie nakล‚ada ลผadnego ograniczenia dล‚ugoล›ci poza globalnฤ… wartoล›ciฤ… SQLITE_MAX_LENGTH.

Uลผyj funkcji typeof() w zapytaniu, takim jak SELECT typeof(column) FROM table. Zwraca ona rzeczywistฤ… klasฤ™ pamiฤ™ci wartoล›ci โ€” null, integer, real, text lub blob โ€” ktรณra moลผe rรณลผniฤ‡ siฤ™ od zadeklarowanego typu kolumny ze wzglฤ™du na dynamiczny typ.ping.

Dodano tabele STRICT w SQLite 3.37, wyล‚ฤ…cz powinowactwo typรณw i odrzuฤ‡ kaลผdฤ… wartoล›ฤ‡, ktรณra nie pasuje do zadeklarowanego typu kolumny. Dozwolone sฤ… tylko wartoล›ci INT, INTEGER, REAL, TEXT, BLOB i ANY, co zapewnia sztywne warunki.ping znaleziono w innych bazach danych.

Przechowuj pieniฤ…dze jako liczbฤ™ caล‚kowitฤ… w najmniejszej jednostce, takiej jak centy, aby uniknฤ…ฤ‡ bล‚ฤ™dรณw zaokrฤ…glania rzeczywistych wartoล›ci zmiennoprzecinkowych. W przypadku zmiennej lub bardzo wysokiej precyzji funkcja TEXT zachowuje dokล‚adny ciฤ…g liczbowy. SQLite nie ma dedykowanego rodzaju pieniฤ…dza o staล‚ej wartoล›ci.

Ustawienie SQLITE_MAX_LENGTH ogranicza wartoล›ฤ‡ TEXT lub BLOB i domyล›lnie wynosi miliard bajtรณw. Obecna implementacja obsล‚uguje do 2 147 483 647 bajtรณw. W razie potrzeby limit moลผna obniลผyฤ‡ w czasie wykonywania za pomocฤ… interfejsu sqlite3_limit().

Tak. Asystenci AI przetwarzajฤ…cy tekst na SQL zamieniajฤ… opis w jฤ™zyku potocznym na polecenia CREATE TABLE, wybierajฤ…c SQLite Klasy pamiฤ™ci masowej i powinowactwa, takie jak INTEGER, TEXT i REAL. Podanie istniejฤ…cych typรณw kolumn poprawia dokล‚adnoล›ฤ‡, a wygenerowany kod SQL naleลผy przejrzeฤ‡ przed uruchomieniem.

Tak. Drugi pilot GitHub sugeruje definicje kolumn z SQLite typy takie jak INTEGER, TEXT, REAL i BLOB w edytorach takich jak VS Code. Odczytuje otaczajฤ…cy schemat i kod migracji, wiฤ™c jego uzupeล‚nienia wykorzystujฤ… prawdziwe nazwy tabel i kolumn.

Podsumuj ten post nastฤ™pujฤ…co: