Column Types

Every column in a table has a type, which decides what it can hold, how it sorts, how it is displayed, and which filter operators apply to it.

The types

TypeHolds
TextAny string
NumberIntegers and decimals, in several widths
BooleanTrue or false
DateA calendar date, with no time
Date & timeA moment, stored in UTC
DurationA length of time
JSONA structured value
UUIDAn identifier
ListSeveral text values in one cell
CategoricalOne of a defined set of values
AttachmentFiles on the row

Numbers carry a width — Int32, Int64, Float32, Float64 and so on — shown beside the type as Number · Int32. The width decides the range a column can hold, which is why narrowing one is not always safe.

Decimal columns keep their precision and scale. A column defined as ten digits with two decimal places stays that; it is part of the type, not a display setting. Number formatting, including how many decimal places are shown, is separate and does not change what is stored.

Date & time columns carry a precision — seconds, microseconds or nanoseconds — and are stored in UTC. The display timezone is a view setting, shown as Display timezone: UTC (default).

Changing a column's type

You can cast a column to another type from the column menu. Three things can happen, and the app decides which before you commit:

What it means
SafeThe cast always works on well-formed data — Int32 to Int64, say
LossyIt may empty rows it cannot convert, or fail outright, depending on what is actually in the column
DisallowedNot offered at all

Lossy casts are offered but flagged. Text to Number is the common one: it works for the rows that hold numbers and cannot work for the rest. Narrowing a number — Int64 down to Int32 — is lossy for the same reason: values outside the smaller range have nowhere to go.

Disallowed casts are hidden rather than refused with an error, so you never pick one. They fall into two groups: conversions with no meaning (boolean to timestamp), and ones that should go through text first rather than directly.

Two types are locked and never cast:

  • Attachment, because a cast would fall through to text and silently detach every file while reporting success.
  • Categorical, except to a List, which is the one conversion that preserves what the column meant.

Where types come from

When you upload a CSV or paste data, types are inferred from the values. Text is the fallback: anything that does not parse consistently as something narrower stays text, which is lossless and always castable later.

Tables read through a connection carry the types the source defines.