Class DataTypes
A convenience class holding commonly used data types. The datatypes are used when defining a new model using Sequelize.define
, like this:
sequelize.define('model', {
column: DataTypes.INTEGER
})
When defining a model you can just as easily pass a string as type, but often using the types defined here is beneficial. For example, using DataTypes.BLOB
, mean
that that column will be returned as an instance of Buffer
when being fetched by sequelize.
Some data types have special properties that can be accessed in order to change the data type.
For example, to get an unsigned integer with zerofill you can do DataTypes.INTEGER.UNSIGNED.ZEROFILL
.
The order you access the properties in do not matter, so DataTypes.INTEGER.ZEROFILL.UNSIGNED
is fine as well. The available properties are listed under each data type.
To provide a length for the data type, you can invoke it like a function: INTEGER(2)
Three of the values provided here (NOW
, UUIDV1
and UUIDV4
) are special default values, that should not be used to define types. Instead they are used as shorthands for
defining default values. For example, to get a uuid field with a default value generated following v1 of the UUID standard:
sequelize.define('model', {
uuid: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV1,
primaryKey: true
}
})
There may be times when you want to generate your own UUID conforming to some other algorithm. This is accomplised using the defaultValue property as well, but instead of specifying one of the supplied UUID types, you return a value from a function.
sequelize.define('model', {
uuid: {
type: DataTypes.UUID,
defaultValue: function() {
return generateMyId()
},
primaryKey: true
}
})
STRING()
A variable length string. Default length 255
Available properties: BINARY
CHAR()
A fixed length string. Default length 255
Available properties: BINARY
TEXT()
An (un)limited length text column. Available lengths: tiny
, medium
, long
INTEGER()
A 32 bit integer.
Available properties: UNSIGNED
, ZEROFILL
BIGINT()
A 64 bit integer.
Note: an attribute defined as BIGINT
will be treated like a string
due this feature from node-postgres to prevent precision loss. To have this attribute as a number
, this is a possible workaround.
Available properties: UNSIGNED
, ZEROFILL
FLOAT()
Floating point number (4-byte precision). Accepts one or two arguments for precision
Available properties: UNSIGNED
, ZEROFILL
REAL()
Floating point number (4-byte precision). Accepts one or two arguments for precision
Available properties: UNSIGNED
, ZEROFILL
DOUBLE()
Floating point number (8-byte precision). Accepts one or two arguments for precision
Available properties: UNSIGNED
, ZEROFILL
DECIMAL()
Decimal number. Accepts one or two arguments for precision
Available properties: UNSIGNED
, ZEROFILL
BOOLEAN()
A boolean / tinyint column, depending on dialect
TIME()
A time column
DATE()
A datetime column
DATEONLY()
A date only column
HSTORE()
A key / value column. Only available in postgres.
JSON()
A JSON string column. Only available in postgres.
JSONB()
A pre-processed JSON data column. Only available in postgres.
NOW()
A default value of the current timestamp
BLOB()
Binary storage. Available lengths: tiny
, medium
, long
RANGE()
Range types are data types representing a range of values of some element type (called the range's subtype). Only available in postgres. See {@link http://www.postgresql.org/docs/9.4/static/rangetypes.html|Postgres documentation} for more details
UUID()
A column storing a unique universal identifier. Use with UUIDV1
or UUIDV4
for default values.
UUIDV1()
A default unique universal identifier generated following the UUID v1 standard
UUIDV4()
A default unique universal identifier generated following the UUID v4 standard
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.
You could also use it to validate a value before permuting and storing it. Checking password length before hashing it for example:
sequelize.define('user', {
password_hash: DataTypes.STRING,
password: {
type: DataTypes.VIRTUAL,
set: function (val) {
this.setDataValue('password', val); // Remember to set the data value, otherwise it won't be validated
this.setDataValue('password_hash', this.salt + val);
},
validate: {
isLongEnough: function (val) {
if (val.length < 7) {
throw new Error("Please choose a longer password")
}
}
}
}
})
In the above code the password is stored plainly in the password field so it can be validated, but is never stored in the DB.
VIRTUAL also takes a return type and dependency fields as arguments
If a virtual attribute is present in attributes
it will automatically pull in the extra fields as well.
Return type is mostly useful for setups that rely on types like GraphQL.
{
active: {
type: new DataTypes.VIRTUAL(DataTypes.BOOLEAN, ['createdAt']),
get: function() {
return this.get('createdAt') > Date.now() - (7 * 24 * 60 * 60 * 1000)
}
}
}
Aliases: NONE
ENUM()
An enumeration. DataTypes.ENUM('value', 'another value')
.
ARRAY()
An array of type
, e.g. DataTypes.ARRAY(DataTypes.DECIMAL)
. Only available in postgres.
GEOMETRY()
A column storing Geometry information.
Only available in PostgreSQL (with PostGIS) or MySQL.
In MySQL, allowable Geometry types are 'POINT', 'LINESTRING', 'POLYGON'.
When using, GeoJSON is accepted as input and returned as output.
In PostGIS, the GeoJSON is parsed using the PostGIS function ST_GeomFromGeoJSON
.
In MySQL it is parsed using the function GeomFromText
.
Therefore, one can just follow the GeoJSON spec for handling geometry objects. See the following examples:
// Create a new point:
var point = { type: 'Point', coordinates: [39.807222,-76.984722]};
User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});
// Create a new linestring:
var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] };
User.create({username: 'username', geometry: line }).then(function(newUser) {
...
});
// Create a new polygon:
var polygon = { type: 'Polygon', coordinates: [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
[100.0, 1.0], [100.0, 0.0] ]
]};
User.create({username: 'username', geometry: polygon }).then(function(newUser) {
...
});
// Create a new point with a custom SRID:
var point = {
type: 'Point',
coordinates: [39.807222,-76.984722],
crs: { type: 'name', properties: { name: 'EPSG:4326'} }
};
User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});
GEOGRAPHY()
A geography datatype represents two dimensional spacial objects in an elliptic coord system.
This document is automatically generated based on source code comments. Please do not edit it directly, as your changes will be ignored. Please write on IRC, open an issue or a create a pull request if you feel something can be improved. For help on how to write source code documentation see JSDoc and dox