Opt-in real typing
SQLite 3.37 (Nov 2021) introduced STRICT tables. Append STRICT to a CREATE TABLE statement and SQLite will reject inserts that don't match the declared types. This is the modern default for new schemas.
Strict mode allows only five types: INTEGER, REAL, TEXT, BLOB, and ANY. The relaxed affinity names like VARCHAR(255) are rejected at table creation — STRICT keeps you honest.
Tip: If you're starting a brand-new schema in 2026, default every table to STRICT. The dynamic-typing 'feature' was a deliberate compromise from the early-2000s embedded-C era; modern application code wants the database to enforce the contract.
One quirk: STRICT tables require all column types to be one of the five strict types. Migrating an existing schema means rewriting any VARCHAR, NUMERIC, etc. into the strict set. ANY exists for the 'I really do want a polymorphic column' case — like a value column in a key-value table.