Every column type of the six databases goes through API Maker as plain JSON. A vector is a list of numbers, a JSON column holds any JSON value, bytes are a Buffer object, a shape is GeoJSON or the form the driver of the database reads it in. The same values work in the generated APIs, the schema APIs and g.sys.db from every language : save, get by id, update, query.
Vectors
VECTOR of MySQL 9, MariaDB 11.7, SQL Server 2025 and Oracle 23ai, vector and halfvec of pgvector : a list of numbers.
JSON
JSON of MySQL, SQL Server 2025 and Oracle 21c+, json and jsonb of PostgreSQL : objects, lists and plain values.
Bytes
{ "type": "Buffer", "data": [1, 2, 3] } both ways, or its JSON text.
Shapes
GeoJSON in, the form of the driver out.
Schemas
A vector column is [EType.number], a JSON column EType.string that takes objects and lists.
Numbers in a vector are floats of 4 bytes in most databases : 0.1 comes back as 0.10000000149011612. Use FLOAT64 vectors of Oracle when every digit counts.
the JSON value on MySQL ; the text on MariaDB, where JSON is a LONGTEXT
BINARY, VARBINARY, BLOB (all sizes), BIT
Buffer
GEOMETRY, POINT, LINESTRING, POLYGON, the multi kinds, GEOMETRYCOLLECTION
points { x, y }, lines and polygons as lists of them
DECIMAL
text, every digit kept
BOOLEAN
1 or 0 (it is a TINYINT)
A point of the system 4326 is written from GeoJSON as longitude, then latitude : { "type": "Point", "coordinates": [20, 10] } is read as { "x": 20, "y": 10 }.
objects and lists too : they are stored as their JSON, and read back as JSON
Bytes
photo: EType.string
a Buffer object
Shape, interval
place: EType.string
GeoJSON, an interval object, or their texts
PostgreSQL array
tags: [EType.string]
a list
Bytes, JSON, intervals and the large objects of Oracle (CLOB, XMLTYPE) get no maxLength : the length their catalog gives counts what the row stores, not characters of what you send. The database still refuses what does not fit.
A list given to a text column which is not a JSON column is still refused : <field> should be array in schema as data is in array.
Schemas made before these types were supported keep their old fields. Generate them again, or change the field by hand.
g.sys.db sends the same values in every language : lists, maps and the Buffer object as a plain map. See save single or multiple for the code of all eight languages.