Причуды SQLite. Совсем недавно на оф. сайте SQLite набрёл на раздел "quirks", который рассказывает про "приколы" этой БД. Это просто баги и костыли к которым все привыкли. Многие даже не знают, что есть какие-то особенности вообще. Так что хочу с вами поделиться:
1. Типы данных не накладывают ограничений на типы данных в столбце. Это больше рекомендация, а не правило: Столбец с типом INTEGER может хранить текстовую строку. SQLite конечно попытается преобразовать строку в число, но если это не удастся, просто продолжит работать как ни в чем не бывало. 2. Отсутствие отдельных типов для BOOLEAN и DATETIME: В SQLite нет специальных типов для булевых значений или дат и времени. Вместо этого для BOOLEAN обычно используются целые числа 0 и 1, а для DATETIME — TEXT, REAL или INTEGER. 3. Столбцы могут вообще не иметь типа. Вы можете создавать таблицы, в которых у столбцов не указан тип данных. Да, там появились STRICT-таблицы, но кто их использует? 4. NULL в PRIMARY KEY. Из-за старой ошибки, в SQLite столбец, являющийся PRIMARY KEY, может содержать значения NULL. Хотели пофиксить, но на эту "фичу" очень многие пользователи завязали логику работы своих приложений. Пришлось оставить во благо обратной совместимости. 5. Ключевые слова в качестве идентификаторов. SQLite позволяет использовать многие ключевые слова SQL в качестве имён для таблиц или столбцов без необходимости их экранирования. 6. Проверка внешних ключей (Foreign Keys) отключена по умолчанию. Хотя SQLite поддерживает внешние ключи, их проверка по умолчанию выключена. Чтобы её активировать, необходимо выполнить команду PRAGMA foreign_keys = ON; для каждого соединения с базой данных. Естественно этим тоже никто не пользуется и даже не подозревает в отсутствии проверки.
P.S Это между прочим самая популярная БД в мире, вне конкуренции. При этом её поддерживают всего 3 человека 😘 🔛 @kisel_it