SQLite Tipovi podataka: cijeli broj, tekst, broj, stvarni broj, blob

โšก Pametni saลพetak

SQLite tipovi podataka rade drugaฤije od drugih baza podataka jer SQLite koristi dinamiฤki typing, pohranjujuฤ‡i bilo koju vrijednost u bilo koji stupac. Klase pohrane, afinitet tipa i deklarirana imena tipova zajedno odreฤ‘uju kako se svaka vrijednost fiziฤki sprema na disk.

  • ๐Ÿงฉ Dinamiฤki Typing: SQLite je dinamiฤki tipiziran, pa vrijednost koju unesete, a ne definicija stupca, odreฤ‘uje kako ฤ‡e se podaci pohraniti.
  • ๐Ÿ—„๏ธ Klase skladiลกtenja: Pet klasa pohrane - NULL, INTEGER, REAL, TEXT i BLOB - opisuju kako se svaka vrijednost pohranjuje na disku.
  • ๐ŸŽฏ Afinitet tipa: Svaki stupac dobiva preporuฤeni afinitet โ€” TEXT, NUMERIC, INTEGER, REAL ili BLOB โ€” iz svog deklariranog naziva tipa.
  • ๐Ÿ”ข Pohrana brojeva: Bilo koji deklarirani tip koji sadrลพi INT postaje INTEGER, dok REAL, DOUBLE i FLOAT sadrลพe brojeve s pomiฤnim zarezom u osam bajtova.
  • ๐Ÿ“… Datumi i logiฤke vrijednosti: SQLite nema namjensku klasu DATE ili BOOLEAN i umjesto toga pohranjuje te vrijednosti kao TEXT, REAL ili INTEGER.
  • ๐Ÿค– AI pomoฤ‡: AI tekstualni asistenti u SQL i GitHub Copilot generiraju SQLite definicije stupaca i odabir tipova podataka s jednostavnog engleskog jezika.

SQLite Vrste podataka

U donjim odjeljcima objaลกnjeno je kako SQLite obraฤ‘uje tipove podataka, poฤevลกi s pet klasa pohrane, zatim afinitet tipova i njihova pravila dodjeljivanja, te na kraju obradio primjere pohrane cijelih brojeva, realnih brojeva, BLOB-ova, logiฤkih vrijednosti i datuma.

Vrste podataka u SQLite razlikuju se od onih u drugim sustavima za upravljanje bazama podataka. U SQLite, moลพete deklarirati tipove podataka normalno, ali i dalje moลพete pohraniti bilo koju vrijednost u bilo koji tip podataka.

SQLite je bez tipa. Ne postoje fiksni tipovi podataka; moลพete pohraniti bilo koju vrstu podataka u bilo koji stupac. To se naziva dinamiฤki tip.ping.

U statiฤkim tipovima, kao i u drugim sustavima za upravljanje bazama podataka, ako deklarirate stupac s tipom podataka integer, moลพete umetnuti samo vrijednosti tipa podataka integer. Meฤ‘utim, u dinamiฤkim tipovima, kao u SQLite, tip stupca odreฤ‘en je umetnutom vrijednoลกฤ‡u, a zatim SQLite pohranjuje tu vrijednost ovisno o vrsti.

SQLite Klase skladiลกtenja

In SQLite Postoje razliฤite metode pohrane ovisno o vrsti vrijednosti; te razliฤite metode pohrane nazivaju se klasama pohrane u SQLite.

Sljedeฤ‡e su klase pohrane dostupne u SQLite:

  • NULL โ€“ ova klasa pohranjivanja koristi se za pohranjivanje bilo koje NULL vrijednosti.
  • CIJELI โ€“ bilo koja numeriฤka vrijednost pohranjuje se kao predznaฤena cjelobrojna vrijednost (moลพe sadrลพavati i pozitivne i negativne cjelobrojne vrijednosti). CIJELI broj u SQLite pohranjuju se u 1, 2, 3, 4, 6 ili 8 bajtova prostora za pohranu, ovisno o vrijednosti broja.
  • STVARAN โ€“ ova klasa pohrane koristi se za pohranu vrijednosti s pomiฤnim zarezom, a one se pohranjuju u 8 bajtova memorije.
  • TEKST โ€“ pohranjuje tekstualne nizove. Takoฤ‘er podrลพava razliฤita kodiranja poput UTF-8, UTF-16BE ili UTF-16LE.
  • BLOB โ€“ koristi se za pohranu velikih datoteka, poput slika ili tekstualnih datoteka. Vrijednost se pohranjuje kao niz bajtova, isto kao i ulazna vrijednost.

SQLite Vrsta afiniteta

Afinitet tipa je preporuฤena vrsta podataka pohranjenih u stupcu. Meฤ‘utim, i dalje moลพete pohraniti bilo koju vrstu podataka kako ลพelite; ove vrste su preporuฤene, a ne obavezne.

Ove su vrste uvedene u SQLite kako bi se maksimizirala kompatibilnost izmeฤ‘u SQLite te druge sustav za upravljanje bazama podatakas.

Svaki stupac deklariran u SQLite Bazi podataka se dodjeljuje afinitet tipa ovisno o deklariranom tipu podataka. Evo popisa afiniteta tipa u SQLite:

  • TEKST.
  • NUMERIฤŒKI.
  • CIJELI BROJ.
  • STVARAN.
  • BLOB.

Evo kako SQLite odreฤ‘uje afinitet stupca na temelju njegovog deklariranog tipa podataka:

  • INTEGER afinitet se dodjeljuje ako deklarirani tip sadrลพi niz "INT".
  • Afinitet tipa TEXT dodjeljuje se ako stupac u svom tipu podataka sadrลพi jedan od sljedeฤ‡ih nizova znakova: โ€žTEXTโ€œ, โ€žCHARโ€œ ili โ€žCLOBโ€œ. Na primjer, tipu VARCHAR dodjeljuje se afinitet tipa TEXT.
  • BLOB afinitet se dodjeljuje ako stupac nema naveden tip ili je tip podataka BLOB.
  • Afinitet tipa REAL dodjeljuje se ako tip sadrลพi jedan od sljedeฤ‡ih nizova znakova: โ€žDOUBโ€œ, โ€žREALโ€œ ili โ€žFLOATโ€œ.
  • NUMERIC afinitet se dodjeljuje za bilo koju drugu vrstu podataka.

U nastavku je i tablica koja prikazuje neke primjere karteping izmeฤ‘u SQLite tipovi podataka i njihovi afiniteti odreฤ‘eni ovim pravilima:

Kartaping izmeฤ‘u SQLite deklarirani tipovi podataka i njihovi dodijeljeni afiniteti tipova, s primjerima INT, CHAR, TEXT, BLOB, REAL, FLOAT i NUMERIC

Primjeri pohranjivanja vrsta podataka u SQLite

Pohranjivanje brojeva sa SQLite CIJELI

Ako bilo koji stupac ima tip podataka koji sadrลพi rijeฤ "INT", bit ฤ‡e mu dodijeljen afinitet tipa INTEGER. Bit ฤ‡e pohranjen u INTEGER klasi pohrane.

Svim sljedeฤ‡im tipovima podataka dodijeljen je afinitet tipa INTEGER:

  • INT, INTEGER, BIGINT.
  • INT2, INT4, INT8.
  • MALI, SITNIฤŒKI, SREDNJI.

INTEGER afinitet tipa u SQLite moลพe sadrลพavati bilo koji dodijeljeni cijeli broj (pozitivan ili negativan) od 1 bajta do maksimalno 8 bajtova.

Pohranjivanje brojeva sa SQLite STVARAN

REALNI brojevi su brojevi s dvostrukom preciznoลกฤ‡u u pomiฤnim zarezom. SQLite pohranjuje realne brojeve kao 8-bajtni niz. Evo popisa tipova podataka u SQLite koje moลพete koristiti za pohranjivanje STVARNIH brojeva:

  • STVARAN.
  • DVOSTRUKO.
  • DVOSTRUKA PRECIZNOST.
  • PLUTATI.

Pohranjivanje velikih podataka sa SQLite BLOB

Postoji samo jedan naฤin za pohranjivanje velikih datoteka u SQLite baza podataka, a koja koristi tip podataka BLOB. Ovaj tip podataka koristi se za pohranu velikih datoteka poput slika ili datoteka bilo koje vrste. Datoteka se pretvara u niz bajtova, a zatim pohranjuje u istoj veliฤini kao i ulazna datoteka.

Spremanje SQLite logiฤke

SQLite nema zasebnu klasu pohrane BOOLEAN. Umjesto toga, BOOLEAN vrijednosti se pohranjuju kao CIJELI BROJ, gdje 0 predstavlja laลพno, a 1 istinito.

Spremanje SQLite datumi i vremena

Moลพete deklarirati datume ili datume i vremena u SQLite pomoฤ‡u jedne od sljedeฤ‡ih vrsta podataka:

  • INFORMACIJE
  • DATUM VRIJEME
  • VREMENSKI KAMP
  • VRIJEME

Imajte na umu da ne postoji zasebna klasa pohrane DATE ili DATETIME u SQLiteUmjesto toga, sve vrijednosti deklarirane s jednim od prethodnih tipova podataka pohranjuju se u klasu pohrane ovisno o formatu datuma umetnute vrijednosti, kako slijedi:

  • TEKST โ€“ ako umetnete vrijednost datuma u formatu niza ISO8601 (โ€žGGGG-MM-DD HH:MM:SSSโ€œ).
  • STVARAN โ€“ ako unesete vrijednost datuma kao julijanski broj dana, broj dana od podneva u Greenwichu 24. studenog 4714. pr. Kr. Vrijednost datuma tada se pohranjuje kao REALNA vrijednost.
  • CIJELI โ€“ kao Unix Vrijeme, broj sekundi od 1970-01-01 00:00:00 UTC.

Pitanja i odgovori

Klasa pohrane je kako SQLite fiziฤki pohranjuje vrijednost: NULL, INTEGER, REAL, TEXT ili BLOB, ลกto se odreฤ‘uje za svaku vrijednost tijekom izvoฤ‘enja. Afinitet tipa je klasa koju stupac preferira, odabrana iz njegovog deklariranog naziva tipa, koja SQLite pokuลกava se prijaviti.

Ne. SQLite zanemaruje broj u zagradama, pa se VARCHAR(50) i VARCHAR ponaลกaju identiฤno. Oba dobivaju TEXT afinitet jer naziv tipa sadrลพi CHAR i SQLite ne nameฤ‡e ograniฤenje duljine osim globalne vrijednosti SQLITE_MAX_LENGTH.

Koristite funkciju typeof() u upitu, kao ลกto je SELECT typeof(column) FROM table. Vraฤ‡a stvarnu klasu pohrane vrijednosti - null, integer, real, text ili blob - koja se moลพe razlikovati od deklariranog tipa stupca zbog dinamiฤkog tipa.ping.

STROGE tablice, dodane u SQLite 3.37, iskljuฤite afinitet tipa i odbacite bilo koju vrijednost koja ne odgovara deklariranom tipu stupca. Dopuลกteni su samo INT, INTEGER, REAL, TEXT, BLOB i ANY, dajuฤ‡i kruti typing pronaฤ‘ene u drugim bazama podataka.

Pohranite novac kao CIJELI broj u najmanjoj jedinici, kao ลกto su centi, kako biste izbjegli pogreลกke zaokruลพivanja REAL vrijednosti s pomiฤnim zarezom. Za varijabilne ili vrlo visoke preciznosti, TEXT ฤuva toฤan niz brojeva. SQLite nema namjensku vrstu novca s fiksnom toฤkom.

Postavka SQLITE_MAX_LENGTH ograniฤava TEXT ili BLOB vrijednost i zadana je vrijednost milijardu bajtova. Trenutna implementacija podrลพava do 2,147,483,647 bajtova. Ograniฤenje moลพete smanjiti tijekom izvoฤ‘enja pomoฤ‡u suฤelja sqlite3_limit() kada je to potrebno.

Da. AI tekstualni SQL asistenti pretvaraju opis na obiฤnom engleskom jeziku u naredbe CREATE TABLE, odabirom SQLite klase pohrane i afiniteti kao ลกto su INTEGER, TEXT i REAL. Navoฤ‘enje postojeฤ‡ih tipova stupaca poboljลกava toฤnost, a generirani SQL treba pregledati prije pokretanja.

Da. GitHub kopilot predlaลพe definicije stupaca s SQLite tipovi poput INTEGER, TEXT, REAL i BLOB u tekstu u editorima kao ลกto su VS CodeฤŒita okolnu shemu i migracijski kod, tako da njegova dovrลกavanja ponovno koriste vaลกa stvarna imena tablica i stupaca.

Saลพmite ovu objavu uz: