DEV Community

Hugo Di Francesco
Hugo Di Francesco

Posted on • Originally published at codewithhugo.com on

7 1

Sequelize Data Types: a practical guide

DataTypes are core to the Sequelize 4 library. This is a practical and complete guide to make up for the sparse Sequelize official documentation on the subject.

First of all, DataTypes contains both the types and generators for default values: eg. NOW, UUIDV1 and UUIDV4 are special default values.

The places where you’re likely to encounter DataTypes are in the model field definition and in the migration definitions. Note that for a given model and field, the data type should be the same in the model and in the migration.

Table of contents:

  • Text types
  • Default values
  • Number
  • Fancy primitive types
  • Date/Time
  • Fancy types
  • Postgres fancy types

This is an extract from the Sequelize ES6 Cheatsheet- the better Sequelize docs you wish you had (get it here).

Text types

  • STRING
    • A variable length string.
    • Default length 255.
    • Supports BINARY
    • Usage: a 100 length binary string DataTypes.STRING(100).BINARY
  • CHAR
    • A fixed length string.
    • Default length 255.
    • Supports BINARY
    • Usage: a 100 length binary char DataTypes.CHAR(100).BINARY
  • TEXT: An unlimited length text column

Default values

  • NOW: A default value of the current timestamp
  • UUIDV1: A default unique universal identifier generated following the UUID v1 standard
  • UUIDV4: A default unique universal identifier generated following the UUID v2 standard

Number

All the following support these properties: UNSIGNED, ZEROFILL.

eg.

DataTypes.INTEGER.UNSIGNED.ZEROFILL
// or 
DataTypes.INTEGER.ZEROFILL.UNSIGNED

The same can be done using BIGINT.UNSIGNED, FLOAT.UNSIGNED etc.

  • INTEGER: A 32 bit integer.
  • BIGINT: A 64 bit integer.
  • FLOAT: Floating point number (4-byte precision). Accepts one or two arguments for precision
  • REAL: Floating point number (4-byte precision). Accepts one or two arguments for precision
  • DOUBLE: Floating point number (8-byte precision). Accepts one or two arguments for precision
  • DECIMAL: Decimal number. Accepts one or two arguments for precision

Fancy primitive types

  • BOOLEAN: Boolean/tinyint column that gets coerced to a JavaScript Boolean.
  • UUID: A column storing a unique universal identifier, shape is validated, use with UUIDV1 or UUIDV4 default values

Date/Time

  • TIME: A time column
  • DATE: A datetime column
  • DATEONLY: A date only column

Fancy types

  • BLOB: Binary storage. Available lengths: tiny, medium, long eg. DataTypes.BLOG('tiny')
  • VIRTUAL
    • A virtual value that is not stored in the DB. This could for example be useful if you want to provide a default value in your model that is returned to the user but not stored in the DB.
    • See the docs
  • ENUM
    • An enumeration.
    • DataTypes.ENUM('value', 'another value')
    • Ideally should be used with strings stored in constantsjs const FIRST_ENUM_VALUE = 'FIRST_ENUM_VALUE'; const OTHER_ENUM_VALUE = 'OTHER_ENUM_VALUE'; // In migration or model definition DataTypes.ENUM(FIRST_ENUM_VALUE, OTHER_ENUM_VALUE)

Postgres fancy types

  • HSTORE: A key/value column
  • JSON: A JSON string column.
  • JSONB: A pre-processed JSON data column.
  • RANGE: For Postgres 9.4+, range types are data types representing a range of values of some element type (called the range’s subtype).
  • ARRAY
    • An array of type, e.g. DataTypes.ARRAY(DataTypes.DECIMAL)

This is an extract from the Sequelize ES6 Cheatsheet- the better Sequelize docs you wish you had (get it here).

unsplash-logo
Mika Baumeister

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (0)

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up