Здравствуйте, уважаемые посетители сайта ZametkiNaPolyah.ru. Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. В данной записи мы познакомимся с понятием класса данных в SQLite3, посмотрим какие классы данных поддерживает SQLite3, а какие нет, а также мы разберемся с механизмами обработки классов данных ядром SQLite3: как хранятся данные на сервере и что с ними происходит, когда мы обращаемся к таблицам под управлением SQLite3.

 SQLite3 вместо типов данных использует классы данных. Классы данных в SQLite3 – это более широкое понятие, нежели тип. Любое значение в SQLite3 может иметь один из пяти классов:

  • NULL – пустое значение или его отсутствие. Значение NULL в SQLite3, как и во многих других СУБД и языках программирования уникально, то есть оно не равно ни другому NULL ни еще какому-либо значению. На NULL можно только проверить;
  • INTEGER – класс данных INTEGER в SQLite3 используется для хранения целочисленных значений, которые хранятся в 1, 2, 3, 4, 6 или 8 байтах, в зависимости от самого значения;
  • REAL – класс данных REAL в SQLite3 предназначен для хранения вещественных чисел, данные в классе REAL хранятся в формате восьмибайтного числа IEEE с плавающей точкой (вспомните школьную математику, где вам рассказывали про мантиссу и порядок);
  • TEXT – класс данных TEXT в SQLite3 используется для хранения строковых значений, в базе данных данные с классом TEXT хранятся с использованием кодировки UTF-8 или UTF-16 (это можно настроить, рекомендуем использовать UTF-8);
  • BLOB – класс данных BLOB в SQLite3 используется для хранения бинарных данных, данные с классом BLOB хранятся в том виде, в котором они были введены.

В SQLite3 довольно интересно реализован процесс хранения и обработки данных. Например, числа в базе данных с классом INTEGER хранятся на диске по-разному и могут занимать разное количество байт, но, когда мы делаем запрос, числа поступают в оперативную память и приводятся к восьмибайтному формату.

Любой столбец таблицы в SQLite3 может быть использован для хранения любого класса данных, за исключением столбца, который был явно объявлен, как INTEGER PRIMARY KEY.

Давайте теперь перечислим те классы данных, которых нет в SQLite3:

  • в SQLite3 нет ни логического класса данных ни логического типа данных, вместо этого разработчики SQLite3 предлагают использовать 0 или 1;
  • в SQLite3 нет класса данных даты и времени, но функции для работы с датой и времен есть, подробнее про дату и время мы поговорим в следующей части.

Вот такие особенности типизации данных в SQLite3.

Возможно, эти записи вам покажутся интересными


Выберете удобный для себя способ, чтобы оставить комментарий

This article has 2 comments

  1. Александра А. Reply

    Здравствуйте! Не подскажите, а для меня, как для пользователя sqlite, в чем плюсы и в чем минусы из-за того что в sqlite нет типов данных, а есть классы?

    • Кирилл Reply

      Особой разницы никакой, повторюсь, что класс данных — это более широкое понятие, нежели тип. Минусы классов данных в том, что не всегда можно легко найти ошибку в своем коде в тех ситуациях, когда другие СУБД будут выдавать ошибки из-за несовместимости типов данных, а SQLite будет пытаться преобразовать один класс данных в другой, чтобы выполнить нужную операцию и будет выполнять, но по обычной логике такие операции выполняться не должны и иногда даже бывают вредны. Вам нужно быть очень внимательной, когда работаете с классами данных в SQLite. Что же касается плюсов: вам не нужно запоминать все многообразие типов данных, т.к. классов данных всего пять, вам не нужно долго думать о выборе типа данных для столбца, условно: char, varchar и пр., в SQLite3 есть только текст, который на жестком диске под одно значение использует ровно столько байт, сколько занимает значение, а что потом с этим текстом происходит при запросе, на самом деле, это интимные подробности SQLite3, которые разработчику вообще не сильно интересны.

Добавить комментарий для Александра А. Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Loading Disqus Comments ...