Статья Автор: Деникина Н.В., Деникин А.В.

Специфика типов данных в SQLite

SQLite реализует подход к типам данных, называемый "динамическая типизация" (dynamic typing), который отличается от жёсткой типизации (strict typing) в других СУБД:

  1. Типы данных не строго фиксированы:

    • В SQLite тип данных столбца является рекомендацией. Это значит, что SQLite позволяет сохранить значение любого типа данных в любом столбце, независимо от его типа. Например, можно сохранить строку в столбце INTEGER, хотя другие СУБД (такие как MySQL или PostgreSQL) вызовут ошибку при попытке такого действия.
    • SQLite проверяет тип данных только в определённых случаях, например, при использовании столбца как PRIMARY KEY.
  2. Аффинити типов:

    • SQLite использует систему аффинити типов (type affinity), чтобы определить, как данные должны быть преобразованы в нужный тип. Аффинити типов означает, что SQLite будет пытаться преобразовать данные в наиболее подходящий тип, указанный для столбца.
    • Например, если столбец имеет тип INTEGER, а данные представляют собой строку, которая может быть преобразована в число, SQLite попытается сохранить её как INTEGER.
    • Существует несколько типов аффинити:
      • INTEGER: Применяется, если в названии типа данных присутствует "INT".
      • TEXT: Применяется, если в названии типа данных присутствует "CHAR", "CLOB" или "TEXT".
      • REAL: Применяется, если в названии типа данных присутствует "REAL", "FLOA", "DOUB".
      • NUMERIC: Используется, если тип данных не подходит под другие категории.
      • NONE: Указывает, что данные сохраняются без приведения к типу (используется для BLOB).
  3. Отсутствие специфичных типов данных:

    • В отличие от других СУБД, SQLite не имеет отдельных типов данных, таких как DATE, TIME, BOOLEAN, VARCHAR(n).
    • Даты и времена, как правило, сохраняются в формате TEXT (строка с датой) или INTEGER (число, представляющее количество секунд с начала эпохи Unix).
    • Логические значения (TRUE или FALSE) обычно сохраняются как INTEGER, где 0 представляет FALSE, а 1 представляет TRUE.

Примеры создания таблицы с различными типами данных и аффинити

CREATE TABLE sample_data ( 
   id INTEGER PRIMARY KEY, 
   name TEXT, -- текстовая строка 
   price REAL, -- число с плавающей запятой 
   created_at TEXT, -- дата в текстовом формате 
   is_active INTEGER, -- логическое значение (0 = FALSE, 1 = TRUE) 
   image BLOB -- двоичные данные, например, изображение 
); 

В этой таблице:

  • id — целое число с уникальными значениями.
  • name — текстовое значение.
  • price — число с плавающей запятой.
  • created_at — текстовое представление даты.
  • is_active — логическое значение, сохранённое как целое число.
  • image — двоичные данные (например, изображение).

Заключение

Типы данных в SQLite, такие как INTEGER, TEXT, REAL, и BLOB, представляют собой базовые структуры для хранения данных. SQLite использует уникальный подход к типам данных благодаря аффинити и динамической типизации, что позволяет сохранять данные более гибко, чем в других СУБД. Это делает SQLite удобным для разработки приложений, где строгая типизация может не быть приоритетом, но требует внимательного подхода для поддержания целостности и согласованности данных.

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать