SQLite Gegevenstypen: Int, Text, Numeric, Real, Blob

โšก Slimme samenvatting

SQLite Gegevenstypen werken anders dan in andere databases, omdat SQLite maakt gebruik van dynamische typingwaarbij elke waarde in elke kolom kan worden opgeslagen. Opslagklassen, type-affiniteit en gedeclareerde typenamen bepalen samen hoe elke waarde fysiek op de schijf wordt opgeslagen.

  • ๐Ÿงฉ Dynamische Typing: SQLite Het gegevenstype is dynamisch, dus de waarde die u invoert, en niet de kolomdefinitie, bepaalt hoe de gegevens worden opgeslagen.
  • ๏ธ Opslagklassen: Vijf opslagklassen โ€” NULL, INTEGER, REAL, TEXT en BLOB โ€” beschrijven hoe elke waarde op de schijf wordt opgeslagen.
  • ๐ŸŽฏ Type-affiniteit: Aan elke kolom wordt een aanbevolen type toegewezen โ€” TEXT, NUMERIC, INTEGER, REAL of BLOB โ€” op basis van de naam van het opgegeven gegevenstype.
  • ๐Ÿ”ข Nummeropslag: Elk gedeclareerd type dat INT bevat, wordt INTEGER, terwijl REAL, DOUBLE en FLOAT drijvende-komma getallen in acht bytes opslaan.
  • ๐Ÿ“… Datums en Booleaanse waarden: SQLite Het heeft geen aparte DATE- of BOOLEAN-klasse en slaat die waarden in plaats daarvan op als TEXT, REAL of INTEGER.
  • ๐Ÿค– AI-assistentie: AI-tekst-naar-SQL-assistenten en GitHub Copilot genereren SQLite Kolomdefinities en gegevenstypen kiezen in begrijpelijke taal.

SQLite Gegevenstypen

De onderstaande secties leggen uit hoe SQLite Het behandelt gegevenstypen, te beginnen met de vijf opslagklassen, vervolgens type-affiniteit en de bijbehorende toewijzingsregels, en ten slotte uitgewerkte voorbeelden van het opslaan van gehele getallen, reรซle getallen, BLOB's, Booleaanse waarden en datums.

Gegevenstypen binnen SQLite verschillen van die in andere databasebeheersystemen. SQLiteJe kunt gegevenstypen op de normale manier declareren, maar je kunt nog steeds elke waarde in elk gegevenstype opslaan.

SQLite Het is typeloos. Er zijn geen vaste gegevenstypen; je kunt elk gewenst gegevenstype in elke kolom opslaan. Dit wordt dynamisch typen genoemd.ping.

Bij statische gegevenstypen, zoals in andere databasesystemen, kunt u, als u een kolom declareert met het gegevenstype integer, alleen waarden van het gegevenstype integer invoegen. Bij dynamische gegevenstypen, zoals in SQLiteHet type van de kolom wordt bepaald door de ingevoerde waarde, en vervolgens SQLite slaat die waarde op, afhankelijk van het type.

SQLite Opslagklassen

In SQLite Er bestaan โ€‹โ€‹verschillende opslagmethoden, afhankelijk van het type waarde; deze verschillende opslagmethoden worden opslagklassen genoemd. SQLite.

Hieronder staan โ€‹โ€‹de opslagklassen die beschikbaar zijn in SQLite:

  • NULL โ€“ deze opslagklasse wordt gebruikt om elke NULL-waarde op te slaan.
  • GEHEEL GETAL โ€“ elke numerieke waarde wordt opgeslagen als een getekend geheel getal (het kan zowel positieve als negatieve gehele getallen bevatten). De INTEGER-waarden in SQLite worden opgeslagen in 1, 2, 3, 4, 6 of 8 bytes opslag, afhankelijk van de waarde van het getal.
  • REAL โ€“ Deze opslagklasse wordt gebruikt om drijvende-kommawaarden op te slaan, en deze worden opgeslagen in 8 bytes geheugen.
  • TEKST โ€“ Slaat tekstreeksen op. Het ondersteunt ook verschillende coderingen zoals UTF-8, UTF-16BE of UTF-16LE.
  • BLOB โ€“ wordt gebruikt voor het opslaan van grote bestanden, zoals afbeeldingen of tekstbestanden. De waarde wordt opgeslagen als een byte-array, net als de invoerwaarde.

SQLite Affiniteitstype

Type-affiniteit is het aanbevolen gegevenstype voor opslag in een kolom. U kunt echter nog steeds elk gewenst gegevenstype opslaan; deze typen worden aanbevolen, maar zijn niet verplicht.

Deze typen zijn geรฏntroduceerd in SQLite om de compatibiliteit tussen te maximaliseren SQLite en andere databasemanagementsysteems.

Elke kolom die is gedeclareerd in een SQLite Aan een database wordt een type-affiniteit toegekend op basis van het gedeclareerde gegevenstype. Hier is een lijst met type-affiniteiten in SQLite:

  • TEKST.
  • NUMERIEK.
  • GEHEEL GETAL.
  • ECHT.
  • BLOB.

Hier is hoe SQLite bepaalt de affiniteit van een kolom op basis van het gedeclareerde gegevenstype:

  • INTEGER-affiniteit wordt toegewezen als het gedeclareerde type de snaar โ€œINTโ€.
  • De affiniteit TEXT wordt toegekend als de kolom in het gegevenstype een van de volgende tekenreeksen bevat: "TEXT", "CHAR" of "CLOB". Bijvoorbeeld, aan het type VARCHAR wordt de affiniteit TEXT toegekend.
  • BLOB-affiniteit wordt toegewezen als voor de kolom geen type is opgegeven of als het gegevenstype een BLOB is.
  • De REAL-affiniteit wordt toegekend als het type een van de volgende tekenreeksen bevat: "DOUB", "REAL" of "FLOAT".
  • NUMERIEKE affiniteit wordt toegewezen aan elk ander gegevenstype.

Hieronder vindt u ook een tabel met enkele voorbeelden van de kaart.ping tussen SQLite gegevenstypen en hun affiniteiten bepaald door deze regels:

Wereldmapping tussen SQLite Gedeclareerde gegevenstypen en hun toegewezen type-affiniteiten, met voorbeelden van INT, CHAR, TEXT, BLOB, REAL, FLOAT en NUMERIC.

Voorbeelden van het opslaan van gegevenstypen in SQLite

Nummers opslaan met SQLite GEHEEL GETAL

Als een kolom een โ€‹โ€‹gegevenstype heeft dat het woord "INT" bevat, krijgt deze de type-affiniteit INTEGER toegewezen. De gegevens worden opgeslagen in een INTEGER-opslagklasse.

Aan alle volgende gegevenstypen is een INTEGER-type-affiniteit toegekend:

  • INT, INTEGER, BIGINT.
  • INT2, INT4, INT8.
  • TIYINT, SMALLINT, MEDIUMINT.

INTEGER type affiniteit in SQLite Kan elk toegewezen geheel getal (positief of negatief) bevatten, van 1 byte tot maximaal 8 bytes.

Nummers opslaan met SQLite REAL

Reรซle getallen zijn getallen met een dubbele drijvende-kommaprecisie. SQLite Slaat reรซle getallen op als een array van 8 bytes. Hier is de lijst met gegevenstypen in SQLite die u kunt gebruiken om ECHTE getallen op te slaan:

  • ECHT.
  • DUBBELE.
  • DUBBELE PRECISIE.
  • VLOT.

Grote gegevens opslaan met SQLite BLOB

Er is maar รฉรฉn manier om grote bestanden op te slaan in een SQLite database, en dat maakt gebruik van het BLOB-datatype. Dit datatype wordt gebruikt om grote bestanden op te slaan, zoals afbeeldingen of bestanden van elk type. Het bestand wordt omgezet in een byte-array en vervolgens opgeslagen met dezelfde grootte als het invoerbestand.

Hoe bewaart u SQLite Booleans

SQLite Er is geen aparte opslagklasse voor BOOLEAN-waarden. In plaats daarvan worden BOOLEAN-waarden opgeslagen als INTEGERS, waarbij 0 staat voor onwaar en 1 voor waar.

Hoe bewaart u SQLite data en tijden

Je kunt datums of datum-tijden opgeven in SQLite met behulp van een van de volgende gegevenstypen:

  • DATUM
  • DATUM TIJD
  • TIJDSTAMP
  • TIJD

Merk op dat er geen aparte opslagklasse voor DATE of DATETIME bestaat. SQLiteIn plaats daarvan worden alle waarden die met een van de voorgaande gegevenstypen zijn gedeclareerd, opgeslagen in een opslagklasse afhankelijk van de datumindeling van de ingevoegde waarde, als volgt:

  • TEKST โ€“ als u de datumwaarde invoert in het formaat van een ISO8601-tekenreeks (โ€œJJJJ-MM-DD HH:MM:SS.SSSโ€).
  • REAL โ€“ Als u de datumwaarde invoert als een Juliaanse dagwaarde, het aantal dagen sinds de middag in Greenwich op 24 november 4714 v.Chr., wordt de datumwaarde vervolgens opgeslagen als REAL.
  • GEHEEL GETAL - net zo Unix Tijd, het aantal seconden sinds 1970-01-01 00:00:00 UTC.

Veelgestelde vragen

Een opslagklasse is hoe SQLite Slaat fysiek een waarde op: NULL, INTEGER, REAL, TEXT of BLOB, bepaald per waarde tijdens runtime. Type-affiniteit is de klasse die een kolom prefereert, gekozen op basis van de gedeclareerde typenaam. SQLite probeert zich aan te melden.

Nee. SQLite Het getal tussen haakjes wordt genegeerd, dus VARCHAR(50) en VARCHAR gedragen zich identiek. Beide krijgen TEXT-affiniteit omdat de typenaam CHAR bevat, en SQLite Er wordt geen lengtebeperking opgelegd, behalve de globale SQLITE_MAX_LENGTH-waarde.

Gebruik de functie `typeof()` in een query, bijvoorbeeld `SELECT typeof(column) FROM table`. Deze functie retourneert de werkelijke opslagklasse van de waarde: `null`, `integer`, `real`, `text` of `blob`. Deze kan afwijken van het gedeclareerde type van de kolom vanwege dynamische gegevenstypen.ping.

Strikte tabellen, toegevoegd in SQLite 3.37, schakel type-affiniteit uit en weiger elke waarde die niet overeenkomt met het gedeclareerde type van een kolom. Alleen INT, INTEGER, REAL, TEXT, BLOB en ANY zijn toegestaan, waardoor de rigide typing gevonden in andere databases.

Sla geldbedragen op als een INTEGER in de kleinste eenheid, zoals centen, om afrondingsfouten van REAL-zwevendekommagetallen te voorkomen. Voor variabele of zeer hoge precisie behoudt TEXT de exacte tekenreeks van het getal. SQLite heeft geen specifiek vaststaand valutatype.

De instelling SQLITE_MAX_LENGTH begrenst een TEXT- of BLOB-waarde en is standaard ingesteld op รฉรฉn miljard bytes. De huidige implementatie ondersteunt maximaal 2,147,483,647 bytes. U kunt de limiet indien nodig tijdens de uitvoering verlagen met de interface sqlite3_limit().

Ja. AI-tekst-naar-SQL-assistenten zetten een beschrijving in gewoon Engels om in CREATE TABLE-instructies, waarbij ze de volgende opties selecteren: SQLite Opslagklassen en -affiniteiten zoals INTEGER, TEXT en REAL. Het opgeven van bestaande kolomtypen verbetert de nauwkeurigheid, en de gegenereerde SQL moet worden gecontroleerd voordat deze wordt uitgevoerd.

Ja. GitHub-copiloot suggereert kolomdefinities met SQLite gegevenstypen zoals INTEGER, TEXT, REAL en BLOB kunnen direct in editors worden ingevoerd, zoals VS CodeHet leest de omliggende schema- en migratiecode, waardoor de suggesties voor aanvulling de echte tabel- en kolomnamen hergebruiken.

Vat dit bericht samen met: