490+ Tools Comprehensive Tools for Webmasters, Developers & Site Optimization

Database Data Type Reference

Comprehensive reference guide for data types across major database systems including PostgreSQL, MySQL, SQL Server, SQLite, and Oracle.

This reference helps you choose the right data type for your columns and understand equivalents when migrating between database systems.

Numeric Types

Integer
Database Data Types
PostgreSQL INTEGER, SMALLINT, BIGINT, SERIAL
MySQL INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT
SQL Server INT, TINYINT, SMALLINT, BIGINT
SQLite INTEGER
Oracle NUMBER, INTEGER
Decimal/Float
Database Data Types
PostgreSQL DECIMAL, NUMERIC, REAL, DOUBLE PRECISION
MySQL DECIMAL, FLOAT, DOUBLE
SQL Server DECIMAL, NUMERIC, FLOAT, REAL
SQLite REAL
Oracle NUMBER, FLOAT, BINARY_FLOAT, BINARY_DOUBLE

String Types

Fixed Length
Database Data Types
PostgreSQL CHAR(n), CHARACTER(n)
MySQL CHAR(n)
SQL Server CHAR(n), NCHAR(n)
SQLite TEXT
Oracle CHAR(n), NCHAR(n)
Variable Length
Database Data Types
PostgreSQL VARCHAR(n), TEXT
MySQL VARCHAR(n), TEXT, MEDIUMTEXT, LONGTEXT
SQL Server VARCHAR(n), NVARCHAR(n), TEXT
SQLite TEXT
Oracle VARCHAR2(n), NVARCHAR2(n), CLOB

Date/Time Types

Date
Database Data Types
PostgreSQL DATE
MySQL DATE
SQL Server DATE
SQLite TEXT (ISO8601)
Oracle DATE
Time
Database Data Types
PostgreSQL TIME, TIME WITH TIME ZONE
MySQL TIME
SQL Server TIME
SQLite TEXT (ISO8601)
Oracle TIMESTAMP
DateTime
Database Data Types
PostgreSQL TIMESTAMP, TIMESTAMPTZ
MySQL DATETIME, TIMESTAMP
SQL Server DATETIME, DATETIME2, SMALLDATETIME
SQLite TEXT (ISO8601)
Oracle TIMESTAMP, TIMESTAMP WITH TIME ZONE

Binary Types

Binary
Database Data Types
PostgreSQL BYTEA
MySQL BINARY, VARBINARY, BLOB
SQL Server BINARY, VARBINARY, IMAGE
SQLite BLOB
Oracle RAW, LONG RAW, BLOB

Boolean Types

Boolean
Database Data Types
PostgreSQL BOOLEAN
MySQL BOOLEAN (alias for TINYINT(1))
SQL Server BIT
SQLite INTEGER (0 or 1)
Oracle NUMBER(1) or CHAR(1)

JSON Types

JSON
Database Data Types
PostgreSQL JSON, JSONB
MySQL JSON
SQL Server NVARCHAR with JSON functions
SQLite TEXT with JSON functions
Oracle JSON (21c+), CLOB with JSON

UUID/GUID Types

UUID
Database Data Types
PostgreSQL UUID
MySQL CHAR(36) or BINARY(16)
SQL Server UNIQUEIDENTIFIER
SQLite TEXT or BLOB
Oracle RAW(16)

About Database Data Types

Choosing the right data type is crucial for database performance, storage efficiency, and data integrity. Different database systems offer similar but not identical data types.

Data Type Selection Guidelines

Numeric Data
  • Small Integers (0-255): Use TINYINT or SMALLINT
  • Standard Integers: Use INT or INTEGER
  • Large Integers: Use BIGINT for values over 2 billion
  • Money/Prices: Use DECIMAL(10,2) to avoid rounding errors
  • Scientific Data: Use FLOAT or DOUBLE for approximate values
String Data
  • Fixed Length (e.g., codes): Use CHAR(n)
  • Variable Length (up to 255): Use VARCHAR(n)
  • Long Text: Use TEXT or CLOB
  • Unicode: Use NVARCHAR or specify UTF-8 charset
Date and Time
  • Date Only: Use DATE
  • Time Only: Use TIME
  • Date + Time: Use DATETIME or TIMESTAMP
  • Auto-Update Timestamps: Use TIMESTAMP with default CURRENT_TIMESTAMP

Storage Size Comparison

Data Type Storage Size Range
TINYINT 1 byte 0 to 255 (unsigned) or -128 to 127
SMALLINT 2 bytes 0 to 65,535 (unsigned) or -32,768 to 32,767
INT 4 bytes 0 to 4,294,967,295 (unsigned) or -2,147,483,648 to 2,147,483,647
BIGINT 8 bytes 0 to 18,446,744,073,709,551,615 (unsigned)
CHAR(n) n bytes Fixed length
VARCHAR(n) Variable Up to n characters
DATE 3-4 bytes Varies by database
TIMESTAMP 4-8 bytes Varies by database

Common Migration Mappings

MySQL to PostgreSQL
MySQL PostgreSQL
TINYINT(1)BOOLEAN
TINYINTSMALLINT
DATETIMETIMESTAMP
BLOBBYTEA
AUTO_INCREMENTSERIAL or IDENTITY
SQL Server to PostgreSQL
SQL Server PostgreSQL
BITBOOLEAN
NVARCHARVARCHAR
DATETIME2TIMESTAMP
UNIQUEIDENTIFIERUUID
IDENTITYSERIAL or IDENTITY

Best Practices

  • Use Appropriate Size: Don't use BIGINT when INT will suffice
  • Consider Indexing: Smaller data types index faster
  • Use DECIMAL for Money: Avoid FLOAT/DOUBLE for financial calculations
  • VARCHAR vs TEXT: Use VARCHAR for known max length, TEXT for unlimited
  • NULL vs NOT NULL: Explicitly define NULL handling
  • Default Values: Set sensible defaults when possible
  • Unicode Support: Plan for international characters from the start

Special Data Types

JSON/JSONB (PostgreSQL)

Store and query JSON data natively with indexing support.

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    data JSONB NOT NULL
);

SELECT data->>'name' FROM products WHERE data->>'category' = 'electronics';
ENUM Types

Define a list of allowed values for a column.

CREATE TABLE orders (
    id INT PRIMARY KEY,
    status ENUM('pending', 'processing', 'shipped', 'delivered') NOT NULL
);
UUID/GUID

Universally unique identifiers for distributed systems.

CREATE TABLE sessions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Performance Considerations

  • Storage: Smaller types use less disk space and memory
  • Indexing: Smaller indexes are faster to search
  • Sorting: Numeric types sort faster than strings
  • Joins: Matching data types perform better in joins
  • TEXT vs VARCHAR: Some databases store them differently