Paste CREATE TABLE statements and get a per-column byte-size estimate for Postgres, MySQL, and DuckDB.
INTEGER=4, BIGINT=8, SMALLINT=2, BOOLEAN=1, REAL=4, DOUBLE=8, UUID=16 (Postgres/DuckDB). DATE/TIME/TIMESTAMP are also fixed-width but differ by dialect (e.g. MySQL's DATE is 3 bytes vs. 4 for Postgres/DuckDB) — each dialect's own documented default size is used. MySQL's DECIMAL(p,s) uses MySQL's own documented digit-packing formula (9 decimal digits per 4 bytes, plus a documented partial-byte table), which is exact and doesn't depend on the stored value.VARCHAR(n)/CHAR(n) shown as n bytes plus a small length-prefix overhead — the largest that column could possibly be, not an assumed "average" fill (there's no reliable average without real data, so we don't invent one).TEXT, JSON/JSONB, BYTEA/BLOB, arrays, NUMERIC/DECIMAL without an explicit precision, and Postgres/DuckDB NUMERIC/DECIMAL in general (both store it in a variable-length format that depends on the actual stored value, not just the declared precision — unlike MySQL's fixed packing). These are shown as not estimated rather than a guessed number.