SQLite Типове данни: Int, Text, Number, Real, Blob

⚡ Умно обобщение

SQLite типовете данни работят различно от другите бази данни, защото SQLite използва динамичен typing, съхранявайки всяка стойност във всяка колона. Класовете за съхранение, афинитетът на типа и декларираните имена на типове заедно определят как всяка стойност се запазва физически на диска.

  • 🧩 Динамичен Тайping: SQLite е динамично типизиран, така че стойността, която въвеждате, а не дефиницията на колоната, определя как се съхраняват данните.
  • 🗄️ Класове за съхранение: Пет класа за съхранение – NULL, INTEGER, REAL, TEXT и BLOB – описват как всяка стойност се съхранява на диска.
  • 🎯 Афинитет на типа: Всяка колона получава препоръчителен афинитет — TEXT, NUMERIC, INTEGER, REAL или BLOB — от декларираното име на типа.
  • 🔢 Съхранение на номера: Всеки деклариран тип, съдържащ INT, става INTEGER, докато REAL, DOUBLE и FLOAT съдържат числа с плаваща запетая в осем байта.
  • 📅 Дати и булеви стойности: SQLite няма специален клас DATE или BOOLEAN и съхранява тези стойности като TEXT, REAL или INTEGER.
  • 🤖 AI помощ: Асистентите за преобразуване на текст в SQL с изкуствен интелект и GitHub Copilot генерират SQLite дефиниции на колони и избор на типове данни от разбираем английски език.

SQLite Типове данни

Разделите по-долу обясняват как SQLite обработва типове данни, започвайки с петте класа за съхранение, след това афинитет на типове и правилата за присвояване, и накрая работи с примери за съхранение на цели числа, реални числа, BLOB обекти, булеви стойности и дати.

Типове данни в SQLite се различават от тези в други системи за управление на бази данни. В SQLite, можете да декларирате типове данни по нормален начин, но все пак можете да съхранявате всяка стойност във всеки тип данни.

SQLite е безтипово. Няма фиксирани типове данни; можете да съхранявате всякакъв тип данни, който желаете, във всяка колона. Това се нарича динамичен тип.ping.

В статичните типове, както и в други системи за управление на бази данни, ако декларирате колона с тип данни integer, можете да вмъквате само стойности от тип данни integer. В динамичните типове обаче, както в SQLite, типът на колоната се определя от вмъкнатата стойност и след това SQLite съхранява тази стойност в зависимост от нейния тип.

SQLite Класове за съхранение

In SQLite Има различни методи за съхранение в зависимост от вида на стойността; тези различни методи за съхранение се наричат ​​класове за съхранение в SQLite.

Следват класовете за съхранение, налични в SQLite:

  • NULL – този клас за съхранение се използва за съхраняване на всяка NULL стойност.
  • ИНТЕГЪР – всяка числова стойност се съхранява като цяло число със знак (може да съдържа както положителни, така и отрицателни целочислени стойности). ЦЕЛОЧИСЛЕНИТЕ стойности в SQLite се съхраняват в 1, 2, 3, 4, 6 или 8 байта за съхранение в зависимост от стойността на числото.
  • REAL – този клас за съхранение се използва за съхраняване на стойности с плаваща запетая и те се съхраняват в 8 байта памет.
  • ТЕКСТ – съхранява текстови низове. Поддържа и различни кодировки като UTF-8, UTF-16BE или UTF-16LE.
  • петна – използва се за съхраняване на големи файлове, като изображения или текстови файлове. Стойността се съхранява като байтов масив, същият като входната стойност.

SQLite Тип афинитет

Афинитетът към типа е препоръчителният тип данни, съхранявани в колона. Въпреки това, все още можете да съхранявате всякакъв тип данни, както желаете; тези типове са препоръчителни, а не задължителни.

Тези видове са въведени през SQLite за да увеличите максимално съвместимостта между SQLite и други система за управление на база данниs.

Всяка колона, декларирана в an SQLite На базата данни се присвоява афинитет към типа в зависимост от декларирания тип данни. Ето списък с афинитети към типа в SQLite:

  • ТЕКСТ.
  • ЧИСЛО.
  • ЦЯЛО ЧИСЛО.
  • ИСТИНСКИ.
  • BLOB.

Ето как SQLite определя афинитета на колона от нейния деклариран тип данни:

  • INTEGER афинитетът се присвоява, ако декларираният тип съдържа низ „Вътрешен“.
  • Афинитетът TEXT се присвоява, ако колоната съдържа в своя тип данни един от следните низове: „TEXT“, „CHAR“ или „CLOB“. Например, на типа VARCHAR ще бъде присвоен афинитетът TEXT.
  • BLOB афинитет се присвоява, ако колоната няма указан тип или типът данни е BLOB.
  • Афинитетът REAL се присвоява, ако типът съдържа един от следните низове: „DOUB“, „REAL“ или „FLOAT“.
  • NUMERIC афинитет се присвоява за всеки друг тип данни.

По-долу е показана и таблица, показваща някои примери за картатаping между SQLite типове данни и техните афинитети, определени от тези правила:

Картаping между SQLite декларирани типове данни и техните присвоени типови афинитети, показващи примери за INT, CHAR, TEXT, BLOB, REAL, FLOAT и NUMERIC

Примери за съхраняване на типове данни в SQLite

Съхраняване на номера с SQLite ИНТЕГЪР

Ако някоя колона има тип данни, който съдържа думата „INT“, ще ѝ бъде присвоен афинитет от тип INTEGER. Тя ще бъде съхранена в клас за съхранение INTEGER.

На всички следващи типове данни е присвоен афинитет от тип INTEGER:

  • INT, INTEGER, BIGINT.
  • INT2, INT4, INT8.
  • МАЛЪК, ДРЕБЕН, СРЕДЕН.

INTEGER тип афинитет в SQLite може да съхранява всяко присвоено цяло число (положително или отрицателно) от 1 байт до максимум 8 байта.

Съхраняване на номера с SQLite REAL

РЕАЛНИТЕ числа са числа с двойна точност на плаваща запетая. SQLite съхранява реални числа като 8-байтов масив. Ето списъка с типовете данни в SQLite които можете да използвате за съхраняване на РЕАЛНИ числа:

  • ИСТИНСКИ.
  • ДВОЙНО.
  • ДВОЙНА ТОЧНОСТ.
  • ПЛАВКА.

Съхраняване на големи данни с SQLite петна

Има само един начин за съхраняване на големи файлове в SQLite база данни, и която използва типа данни BLOB. Този тип данни се използва за съхраняване на големи файлове, като изображения или файлове от всякакъв тип. Файлът се преобразува в байтов масив и след това се съхранява със същия размер като входния файл.

Съхранение SQLite Booleans

SQLite няма отделен клас за съхранение на булеви стойности. Вместо това, булевите стойности се съхраняват като цели числа, където 0 представлява невярно, а 1 представлява истина.

Съхранение SQLite дати и часове

Можете да декларирате дати или дати-часове в SQLite използвайки един от следните типове данни:

  • ДАННИ
  • ВРЕМЕ ЗА СРЕЩА
  • КЛАПОТО ЗА ЧАС
  • ВРЕМЕ

Обърнете внимание, че няма отделен клас за съхранение DATE или DATETIME в SQLiteВместо това, всички стойности, декларирани с един от предишните типове данни, се съхраняват в клас за съхранение в зависимост от формата на датата на вмъкнатата стойност, както следва:

  • ТЕКСТ – ако въведете стойността на датата във формат на низ по ISO8601 („ГГГГ-ММ-ДД ЧЧ:ММ:СС.ССС“).
  • REAL – ако въведете стойността на датата като юлианско число на деня, броят дни от обяд в Гринуич на 24 ноември 4714 г. пр.н.е. Стойността на датата се запазва като REAL.
  • ИНТЕГЪР – като Unix Време, броят секунди от 1970-01-01 00:00:00 UTC.

Въпроси и Отговори

Класът за съхранение е как SQLite физически съхранява стойност: NULL, INTEGER, REAL, TEXT или BLOB, определяна за всяка стойност по време на изпълнение. Афинитетът към типа е класът, който колоната предпочита, избран от декларираното ѝ име на тип, което SQLite опитва се да кандидатства.

Не. SQLite игнорира числото в скоби, така че VARCHAR(50) и VARCHAR се държат идентично. И двата получават TEXT афинитет, защото името на типа съдържа CHAR и SQLite не налага ограничение за дължина, освен глобалната стойност SQLITE_MAX_LENGTH.

Използвайте функцията typeof() в заявка, като например SELECT typeof(column) FROM table. Тя връща реалния клас на съхранение на стойността — null, integer, real, text или blob — който може да се различава от декларирания тип на колоната поради динамичния тип.ping.

STRICT таблици, добавени в SQLite 3.37, изключете афинитета на типа и отхвърлете всяка стойност, която не съответства на декларирания тип на колоната. Допустими са само INT, INTEGER, REAL, TEXT, BLOB и ANY, което дава твърд тип.ping намерени в други бази данни.

Съхранявайте парите като ЦЯЛО ЧИСЛО в най-малката мерна единица, като например центове, за да избегнете грешките при закръгляване на REAL стойности с плаваща запетая. За променлива или много висока точност, TEXT запазва точния числов низ. SQLite няма специален тип пари с фиксирана точка.

Настройката SQLITE_MAX_LENGTH ограничава стойността на TEXT или BLOB и е зададена по подразбиране на един милиард байта. Текущата имплементация поддържа до 2 147 483 647 байта. Можете да намалите ограничението по време на изпълнение с интерфейса sqlite3_limit(), когато е необходимо.

Да. Асистентите с изкуствен интелект за преобразуване на текст в SQL превръщат описание на обикновен английски език в оператори CREATE TABLE, избирайки SQLite класове за съхранение и афинитети като INTEGER, TEXT и REAL. Предоставянето на съществуващи типове колони подобрява точността и генерираният SQL трябва да бъде прегледан преди изпълнение.

Да. Копилот на GitHub предлага дефиниции на колони с SQLite типове като INTEGER, TEXT, REAL и BLOB вградени в редактори като VS CodeТой чете околната схема и код за миграция, така че неговите завършвания използват повторно истинските ви имена на таблици и колони.

Обобщете тази публикация с: