What are SQL Data types?
An SQL data type refers to the type of data which can be stored in a column of a database table. In a column, the user can store numeric, string, binary, etc by defining data types. For example integer data, character data, monetary data, date and time data, binary strings, and so on.
While creating a database table in a database, we need to specify following two attributes to define a table column:
- Name of the column
- Data type of the column
A database table's column defines the data, whereas database table rows populate data into the table.
For example, if you want to store student name in a column then you should give column name something like student_name and it's data type will be char(50) which means it can store a string of characters up to 50 characters.
The data type provide guidelines for SQL to understand what type of data is expected inside each column, and hence, prevents the user from entering any unexpected or invalid data in a column. For example, if we want a column to store only integer values, we can specify its data types as INT. SQL will show an error if any other value apart from an integer is inserted into that particular column.
Different RDBMS supports different type of data types to define their tables. This SQL Data types tutorial will list down different data types available in MySQL, Oracle, MS SQL Server, and MS Access databases.
Defining a Data Type
SQL Data types are defined during the creation of a table in a database. While creating a table, it is required to specify its respective data type and size along with the name of the column.
Following is the syntax to specify a data type in MySQL −
CREATE TABLE table_name(column1 datatype, column2 datatype....)
Let us look at an example query below to understand better.
CREATE TABLE Customers (Name VARCHAR (25), Age INT);
In the above SQL query, we are creating a table Customers. And since the Name column only stores string values, we are specifying its data type as "VARCHAR". The VARCHAR data type represents string values in SQL. Similarly, we define the Age column with the integer data type, "INT".
When we assign the appropriate data type to a column, we can make efficient use of memory by allocating only the amount of system memory required for the data in the relevant column.
Types of SQL Data Types
There are three main types of SQL data types available in any RDBMS. They are listed below −
- String
- Numeric
- Date and Time
Data Types in MySQL, SQL Server, Oracle, and MS Access Databases
Let's discuss the data types in MySQL, SQL Server, Oracle (PL/SQL) and MS Access Databases in detail. All the three main types (String, Numeric, Date and Time) of SQL data types explained below-
MySQL Data Types
There are three main data types available in MySQL Database: string, numeric, and date and time. Following section lists down all the data types available in MySQL Version 8.0
MySQL - String Data Types
Data type |
Description |
CHAR(size) |
A fixed length string which can have letters, numbers, and
special characters. The size parameter
specifies the column length in characters which can vary from from 0 to 255.
Default size is 1 |
VARCHAR(size) |
A variable length string which can contain letters, numbers, and
special characters. The size parameter
specifies the maximum string length in characters which can vary from 0 to
65535. |
BINARY(size) |
This is equal to CHAR(), but stores binary byte strings.
The size parameter specifies the column length in bytes. Default
size is 1 |
VARBINARY(size) |
This is equal to VARCHAR(), but stores binary byte strings.
The size parameter specifies the maximum column length in bytes. |
TINYTEXT |
This holds a string with a maximum length of 255 characters |
TEXT(size) |
This holds a string with a maximum length of 65,535 bytes |
LONGTEXT |
This holds a string with a maximum length of 4,294,967,295
characters |
TINYBLOB |
This represents a small BLOBs (Binary Large Objects). Max length
is 255 bytes |
BLOB(size) |
This represents a BLOBs (Binary Large Objects). Holds up to
65,535 bytes of data |
MEDIUMTEXT |
This holds a string with a maximum length of 16,777,215
characters |
MEDIUMBLOB |
This represents a medium BLOBs (Binary Large Objects). Holds up
to 16,777,215 bytes of data |
LONGBLOB |
This represents a large BLOBs (Binary Large Objects). Holds up
to 4,294,967,295 bytes of data |
ENUM(val1, val2, val3, ...) |
A string object that can contain only one value, chosen from a
list of possible values. You can list up to 65535 values in an ENUM list. If
a value is inserted that is not in the list, a blank value will be inserted.
The values are sorted in the order you enter them |
SET(val1, val2, val3, ...) |
A string object that can have 0 or more values, chosen from a
list of possible values. You can list up to 64 values in a SET list |
MySQL - Numeric Data Types
Data type |
Description |
INT |
A normal-sized integer that can be signed or unsigned. If signed,
the allowable range is from -2147483648 to 2147483647. If unsigned, the
allowable range is from 0 to 4294967295. You can specify a width of up to 11
digits. |
TINYINT |
A very small integer that can be signed or unsigned. If signed,
the allowable range is from -128 to 127. If unsigned, the allowable range is
from 0 to 255. You can specify a width of up to 4 digits. |
SMALLINT |
A small integer that can be signed or unsigned. If signed, the
allowable range is from -32768 to 32767. If unsigned, the allowable range is
from 0 to 65535. You can specify a width of up to 5 digits. |
MEDIUMINT |
A medium-sized integer that can be signed or unsigned. If
signed, the allowable range is from -8388608 to 8388607. If unsigned, the
allowable range is from 0 to 16777215. You can specify a width of up to 9
digits. |
BIGINT |
A large integer that can be signed or unsigned. If signed, the
allowable range is from -9223372036854775808 to 9223372036854775807. If
unsigned, the allowable range is from 0 to 18446744073709551615. You can
specify a width of up to 20 digits. |
FLOAT(M,D) |
A floating-point number that cannot be unsigned. You can define
the display length (M) and the number of decimals (D). This is not required
and will default to 10,2, where 2 is the number of decimals and 10 is the
total number of digits (including decimals). Decimal precision can go to 24
places for a FLOAT. |
DOUBLE(M,D) |
A double precision floating-point number that cannot be
unsigned. You can define the display length (M) and the number of decimals
(D). This is not required and will default to 16,4, where 4 is the number of
decimals. Decimal precision can go to 53 places for a DOUBLE. REAL is a
synonym for DOUBLE. |
DECIMAL(M,D) |
An unpacked floating-point number that cannot be unsigned. In
the unpacked decimals, each decimal corresponds to one byte. Defining the
display length (M) and the number of decimals (D) is required. NUMERIC is a
synonym for DECIMAL. |
MySQL - Date and Time Data Types
Data type |
Description |
DATE |
A date in YYYY-MM-DD format, between 1000-01-01 and 9999-12-31.
For example, December 30th, 1973 would be stored as 1973-12-30. |
DATETIME |
A date and time combination in YYYY-MM-DD HH:MM:SS format,
between 1000-01-01 00:00:00 and 9999-12-31 23:59:59. For example, 3:30 in the
afternoon on December 30th, 1973 would be stored as 1973-12-30
15:30:00. |
TIMESTAMP |
A timestamp between midnight, January 1st, 1970 and
sometime in 2037. This looks like the previous DATETIME format, only without
the hyphens between numbers; 3:30 in the afternoon on December 30th,
1973 would be stored as 19731230153000 ( YYYYMMDDHHMMSS ). |
TIME |
Stores the time in a HH:MM:SS format. |
YEAR(M) |
Stores a year in a 2-digit or a 4-digit format. If the length is
specified as 2 (for example YEAR(2)), YEAR can be between 1970 to 2069 (70 to
69). If the length is specified as 4, then YEAR can be 1901 to 2155. The
default length is 4. |
MS SQL Server Data Types
As we have previously discussed in this chapter, there are three main data types in MS SQL server. They are: string, numeric, and date and time.
MS SQL Server - String Data Types
String data types in SQL allow us to store a group of characters, enclosed in single quotes, in a record of a table column. These characters can be of any type: numerals, letters, symbols etc.
Users can either store a fixed number of characters or a variable number of characters, depending on their preferences.
Following is the list of the data types that are included under the string data types in SQL.
Data type |
Description |
char(n) |
It holds the character string with the fixed width. Maximum size
of this data type is 8000 characters. |
varchar(n) |
It holds the character string with the variable width. Maximum
size of this data type is also 8000 characters. |
varchar(max) |
It holds the character string with the variable width. Maximum
size of this data type is 1073741824 characters. |
text |
It holds the character string with the variable width. This data
type can store up to maximum of 2GB text data. |
nchar |
It holds the Unicode string with the fixed width. Maximum size
of this data type is also 4000 characters. |
nvarchar |
It holds the Unicode string with the variable width. Maximum
size of this data type is also 4000 characters. |
ntext |
It holds the Unicode string with the variable width. This data
type can store up to maximum of 2GB text data. |
binary(n) |
It holds the binary string with the fixed width. |
varbinary |
It holds the binary string with variable width. Maximum size of
this data type is also 8000 bytes. |
varbinary(max) |
It holds the binary string of max length of variable width.
Maximum size of this data type is 2 GB. |
image |
It holds the variable length of the data type that can store
binary data. Maximum size of this data type is 2 GB. |
Nvarchar(max) |
It holds the Unicode string of max length of variable width.
Maximum size of this data type is 536870912 characters. |
Example
In the following example, we are creating a table "students" with only string data types values: varchar and char.
CREATE TABLE students (
name varchar(20) NOT NULL,
gender char(6) NOT NULL,
city text NOT NULL
);
Output
On executing the query, the output will be displayed as −
(0 rows affected)
Verification
On the execution of the SQL queries "EXEC sp_help 'dbo.students';" we get the details of the table and the data types of each column.
Column_name |
Type |
Computed |
Length |
Prec |
Scale |
Nullable |
name |
varchar |
no |
20 |
no |
||
gender |
char |
no |
6 |
no |
||
city |
text |
no |
16 |
no |
MS SQL Server - Numeric Data Types
Numeric data types are one of the most widely used data types in SQL. They are used to store numeric values only.
Following is the list of data types that are included under the numeric data types in SQL.
Data type |
Description |
bit |
It holds the integer that can be 0, 1 or NULL. |
tinyint |
It allow to holds the whole number from 0 to 255. |
smallint |
It allow to holds the number between -32,768 and 32,767. |
int |
It allow to holds the whole number between -2,147,483,648 and
2,147,483,647. |
bigint |
It allow to holds the whole number between
-9,223,372,036,854,775,808 and 9,223,372,036,854,775,807 |
decimal(p, s) |
It is fixed precision and scale numbers. That allow numbers from
-10^38 + 1 to 10^38-1. The p parameter indicates the maximum total number of digits
that can be stored on both sides of the decimal point, left and right. It
must have a value from 1 to 38. By default, it is 18. The s parameter indicates the maximum number of the digit to the
right of the decimal point. S must be a value from 0 to p. The value is set
to 0 by default. |
numeric(p, s) |
It is fixed precision and scale numbers. That allow numbers from
-10^38 + 1 to 10^38-1. The p parameter indicates the maximum total number of digits
that can be stored on both sides of the decimal point, left and right. It
must have a value from 1 to 38. By default, it is 18. The s parameter indicates the maximum number of the digit to the
right of the decimal point. S must be a value from 0 to p. The value is set
to 0 by default. |
smallmoney |
It holds the monetary data from -214,748.3648 to 214,748.3647. |
Money |
It holds the monetary data from -922,337,203,685,477.5808 to
922,337,203,685,477.5807. |
Float(n) |
It holds or store the floating precession number data from
-1.79E + 308 to 1.79E + 308. The n parameter indicates whether the field should hold 4 or 8
bytes. Float(24) contains a 4-byte field, while Float(53) contains an 8-byte
field. The default value of n is 53. |
real |
It holds the floating precision number data from -3.40E + 38 to
3.40E + 38. |
Example
In the following example, we are creating a table named employees with only numeric data type values.
ID int NOT NULL,
myBoolean bit NOT NULL,
Fee money,
celsius float NOT NULL
);
Output
On executing the query, the output will be displayed as −
(0 rows affected)
Verification
On the execution of the SQL queries "EXEC sp_help 'dbo.employees;" we get the details of the table and the data types of each column.
Column_name |
Type |
Computed |
Length |
Prec |
Scale |
Nullable |
ID |
int |
no |
4 |
10 |
0 |
no |
myBoolean |
bit |
no |
1 |
no |
||
Fee |
money |
no |
18 |
19 |
4 |
yes |
Celsius |
float |
no |
8 |
53 |
NULL |
no |
MS SQL Server - Date and Time Data Types
datetime data types are used in SQL for values that contain both dates and times. datetime and time values are defined in the formats: yyyy-mm-dd, hh:mm:ss.nnnnnnn (n is dependent on the column definition) respectively.
Following is the list of data types that are included under the date and times data types in SQL.
Data type Description
datetime It stores date and time both from January 1, 1753 to December 31, 9999 with an accuracy of 3.33 milliseconds.
datetime2 It stores date and time both from January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds.
smalldatetime It stores date and time both from January 1, 1900 to June 6, 2079 with an accuracy of 1 minute.
date It stores date only from January 1, 0001 to December 31 9999.
time It store time only to an accuracy of 100 nanoseconds.
datetimeoffset It is the same of the datetime2 with the addition of the time zone offset.
timestamp It stores the unique number that gets updated every time a row gets created or modified. It does not correspond to real time and is based on internal time. Each table may have only one timestamp variable.
Note − Here, datetime has 3.33 milliseconds accuracy where as smalldatetime has 1 minute accuracy.
Example
In the following example, we are creating a table named Cust_details with only date and time data types values.
HolidayDate DATE NOT NULL,
OrderDateTime DATETIME,
ScheduleFrom TIME NOT NULL,
ShippingDateTime DATETIME2
);
Output
On executing the query, the output will be displayed as −
(0 rows affected)
Verification
On the execution of the SQL queries "EXEC sp_help 'dbo.Cust_details;" we get the details of the table and the data types of each column.
Column_name Type Computed Length Prec Scale Nullable
HolidayDate date no 3 10 0 no
OrderDateTime datetime no 8 yes
ScheduleFrom time no 5 16 7 no
ShippingDateTime datetime2 no 8 27 7 yes
Note:
If you are using the MySQL workbench to run the SQL data types and their queries, then there are some SQL data types and formats for date and time that won't work; like "money", "datetime2", "yyyy/mm/dd" and "time AM". All these data types specified are compatible only with the SQL server.
The size of these data types may change in the future updates keep checking the SQL documentation.
Oracle Data Types
There are four main types of data types available in Oracle Database: string, numeric, date & time and large object data types. Following section lists down all the data types available in Oracle Database.
Oracle - String Data Types
Data type Description
CHAR(size) It is used to store character data within the predefined length. It can be stored up to 2000 bytes.
NCHAR(size) It is used to store national character data within the predefined length. It can be stored up to 2000 bytes.
VARCHAR2(size) It is used to store variable string data within the predefined length. It can be stored up to 4000 byte.
VARCHAR(SIZE) It is the same as VARCHAR2(size). You can also use VARCHAR(size), but it is suggested to use VARCHAR2(size)
NVARCHAR2(size) It is used to store Unicode string data within the predefined length. We have to must specify the size of NVARCHAR2 data type. It can be stored up to 4000 bytes.
Oracle - Numeric Data Types
Data type Description
NUMBER(p, s) It contains precision p and scale s. The precision p can range from 1 to 38, and the scale s can range from -84 to 127.
FLOAT(p) It is a subtype of the NUMBER data type. The precision p can range from 1 to 126.
BINARY_FLOAT It is used for binary precision( 32-bit). It requires 5 bytes, including length byte.
BINARY_DOUBLE It is used for double binary precision (64-bit). It requires 9 bytes, including length byte.
Oracle - Date and Time Data Types
Data type Description
DATE It is used to store a valid date-time format with a fixed length. Its range varies from January 1, 4712 BC to December 31, 9999 AD.
TIMESTAMP It is used to store the valid date in YYYY-MM-DD with time hh:mm:ss format.
Oracle - Large Object Data Types (LOB Types)
Data type Description
BLOB It is used to specify unstructured binary data. Its range goes up to 232-1 bytes or 4 GB.
BFILE It is used to store binary data in an external file. Its range goes up to 232-1 bytes or 4 GB.
CLOB It is used for single-byte character data. Its range goes up to 232-1 bytes or 4 GB.
NCLOB It is used to specify single byte or fixed length multibyte national character set (NCHAR) data. Its range is up to 232-1 bytes or 4 GB.
RAW(size) It is used to specify variable length raw binary data. Its range is up to 2000 bytes per row. Its maximum size must be specified.
LONG RAW It is used to specify variable length raw binary data. Its range up to 231-1 bytes or 2 GB, per row.
MS Access Data Types
The MS Access database also offers four categories of data types: String, Numeric, Date and Time, and other specialized data types.
Following are all data types that are provided by MS Access 2013 version and later.
MS Access - String Data Types
Data type Description
Short Text (formerly "Text") It is a string data type that holds Alphanumeric data, like, names, titles, etc. It can hold up to 255 characters.
Long Text (formerly "Memo") It is also a string data type which holds Large Alphanumeric data, like paragraphs, etc. It can hold up to 1GB or 64,000 characters.
MS Access - Numeric Data Types
Data type Description
Number It only holds Numeric data. The size can range from 1 to 16 bytes.
Large Number It also holds numeric data. The maximum size of this data type is 8 bytes.
MS Access - Date and Time Data Types
Data type Description
Date/Time It holds date and time data. The maximum size of this data type is 8 bytes.
Date/Time Extended It also holds date and time data. The maximum size of this data type is Encoded string of 42 bytes.
MS Access - Specialized Data Types
Data type Description
Currency This data type stores Monetary data, with up to 4 decimal places of precision. The size of this data type is 8 bytes.
AutoNumber This stored a unique value that is generated by MS Access for each new record. The size of this data type is 4 bytes.
Yes/No It holds Boolean data in the form of 0 and 1. '0' for false and '-1' for true. The maximum size is 1 byte.
OLE Object It stores pictures, graphs or other ActiveX object from another Window-based application. The size can be stored up to 2GB.
Hyperlink It stores a link address to a document or file on the Internet, on an intranet, on a local area network (LAN), or on your local computer. The size can go up to 8,192 characters.
Attachment The attachment data type in MS Access allows the user to attach such as pictures, documents, spreadsheets, or charts. It can have unlimited number of attachments per record; but only up to the storage limit of the size of a database file.
Calculated With this data type, you can create an expression that uses data from one or more fields. Then, from this expression, a result data type can also be created. However, this data type isn't available in MDB file formats. The size of this data type can vary depending on the result type.
Lookup Wizard The Lookup Wizard is not technically a data type. But when this entry is chosen, a wizard starts to help the user define a lookup field. The size of this data type depends on the size of the lookup field.